2016-09-27 62 views
0

我打了一個URL以阿拉伯語參數值(如下圖所示):發送阿拉伯語通過HTTP崗位作爲參數不工作

http://62.215.226.164/fccsms_P.aspx?UID=something&P=somethingS=InfoText&G=96567771404&M=اخص شقث غخع خن ؤخةث&L=E 

它完美;我用阿拉伯語在電話上收到消息。但是,當我嘗試通過以下代碼實現相同的功能時,我只在郵件中收到問號。

public void sendSms(SendSms object) 
    throws MalformedURLException, ProtocolException, IOException 
{ 
    String message = new String(object.getMessage().getBytes(), "UTF-8"); 
    System.out.println(message); // This also prints only question marks 
    PrintStream out = new PrintStream(System.out, true, "UTF-8"); 
    out.print(message); 

    String charset="UTF-8"; 

    URL url = new URL("http://62.215.226.164/fccsms_P.aspx"); 
    HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
    con.setRequestProperty("Accept-Charset", charset); 

    con.setRequestMethod("POST"); 

    // con.setRequestProperty("User-Agent", USER_AGENT); 
    con.setRequestProperty("Accept-Language", "en-US,en,ar_KW;q=0.5"); 
    con.setRequestProperty("Content-Type", "text/html;charset=utf-8"); 
    String urlParameters = "UID=test&P=test&S=InfoText&G=965" + object.getPhone() + "&M= Hello " + object.getName() + " " + message + " &L=A"; 

    // Send post request 
    con.setDoOutput(true); 
    DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
    wr.writeBytes(urlParameters); 
    wr.flush(); 
    wr.close(); 

    int responseCode = con.getResponseCode(); 
    System.out.println("\nSending 'POST' request to URL : " + url); 
    System.out.println("Post parameters : " + urlParameters); 
    System.out.println("Response Code : " + responseCode); 

    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 
    String inputLine; 
    StringBuffer response = new StringBuffer(); 

    while ((inputLine = in.readLine()) != null) { 
     response.append(inputLine); 
    } 

    in.close(); 
} 

要在阿拉伯語中獲得消息,需要在代碼中添加或更改什麼?

+1

請[不要問同樣的問題兩次(https://stackoverflow.com/questions/39729307 /如何到手柄阿拉伯語中的Java)。 – VGR

回答

0

如果你想發送阿拉伯數據作爲參數,你需要將這些數據編碼爲UTF-8。

您可以使用以下代碼來獲取正確的輸出。

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8")); 
    bw.write(urlParameters); 
    bw.flush(); 
    bw.close(); 

在下面的代碼中發生了問題。所以用下面的代碼替換你的代碼。

DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
    wr.writeBytes(urlParameters); 
    wr.flush(); 
    wr.close(); 
-1

這是因爲HTTP不支持的字符集, 您的瀏覽器會自動處理URL編碼, 在你的代碼需要每個參數分別編碼,因爲特殊字符如的。 asuming object.getMessage()不返回???:

String message = URLEncoder.encode(
""اخص شقث غخع خن ؤخةث", 
java.nio.charset.StandardCharsets.UTF_8.toString()); 

然後拼接:

String urlParameters = "UID=...&M=" + message + "&L=A"; 
+1

如果平臺默認的字符編碼不支持阿拉伯語(在這種情況下它不會出現),這隻會編碼一堆問號。使用接受字符編碼名稱的版本,不推薦使用。 – erickson