2013-07-09 170 views
0

我有一個關於URI和URL的問題 當我通過一個url是工作好,但結果是最糟糕的需要幫助!Java,URL輸出與java輸出不同

因爲我的代碼是這樣的。

import java.io.*; 
import java.net.*; 
import java.net.URL; 

public class isms { 
    public static void main(String[] args) throws Exception { 
     try { 


     String user = new String ("boo"); 
     String pass = new String ("boo"); 
     String dstno = new String("60164038811"); //You are going compose a message to this destination number. 
     String msg = new String("你的哈達哈達!"); //Your message over here 
     int type = 2; //for unicode change to 2, normal will the 1. 
     String sendid = new String("isms"); //Malaysia does not support sender id yet. 

      // Send data 
      URI myUrl = new URI("http://www.isms.com.my/isms_send.php?un=" + user + "&pwd=" + pass 
       + "&dstno=" + dstno + "&msg=" + msg + "&type=" + type + "&sendid=" + sendid); 
      URL url = new URL(myUrl.toASCIIString()); 

      URLConnection conn = url.openConnection(); 
      conn.setDoOutput(true); 

      // Get the response 
      BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      String line; 
      while ((line = rd.readLine()) != null) { 
       // Print the response output... 
       System.out.println(line); 
      }  
      rd.close(); 

      System.out.println(url); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 



    } 
} 

在網絡的輸出是不同的.. 在我的Java輸出

你的哈達哈達!

,但在我的網站是

ÄãμĹþ'ï¹þ'ï!

幫助!!

+0

你能提供更多關於你在網站上打印這些東西的詳細信息嗎? – raygozag

+3

編碼是你的問題,你必須使用另一種編碼,接受亞洲字母..順便說一句,不要使用'新的字符串'而是使用只是「」和psw不應該傳入'GET METHOD' – nachokk

+0

@raygozag該網站是一個消息服務,當你改變它將發送到目的地號碼的消息。 –

回答

0
String user = new String ("boo"); 

您不需要(也不應該)做new String在Java的String user = "boo";是罰款。

String msg = new String("你的哈達哈達!"); 

在源寫非ASCII字符意味着你必須得到-encoding標誌javac,以配合您與保存在文本文件的編碼。您可能將.java文件保存爲UTF-8,但未在編譯時將您的構建環境配置爲使用UTF-8。

如果你不知道,你有這個權利,你可以在此期間使用ASCII安全\u逃逸:

String msg = "\u4F60\u7684\u54C8\u8FBE\u54C8\u8FBE!"; // 你的哈達哈達! 

最後:

URI myUrl = new URI("http://www.isms.com.my/isms_send.php?un=" + user + "&pwd=" + pass 
      + "&dstno=" + dstno + "&msg=" + msg + "&type=" + type + "&sendid=" + sendid); 

當你把一起使用的URI應該是URL轉義字符串中包含的每個參數。否則,值中的任何&或其他無效字符都會中斷查詢。這也允許你選擇用什麼字符集創建查詢字符串。

String enc = "UTF-8"; 
URI myUrl = new URI("http://www.isms.com.my/isms_send.php?" + 
    "un=" + URLEncoder.encode(user, enc) + 
    "&pwd=" + URLEncoder.encode(pass, enc) + 
    "&dstno=" + URLEncoder.encode(dstno, enc) + 
    "&msg=" + URLEncoder.encode(msg, enc) + 
    "&type=" + URLEncoder.encode(Integer.toString(type), enc) + 
    "&sendid=" + URLEncoder.encode(sendid, enc) 
); 

什麼enc正確的價值是取決於你正在連接的服務,但UTF-8是一個很好的猜測。