2016-05-27 128 views
1

我可以用我的應用程序發送一個http文章。 問題是,ä,ö等特殊字符不正確。httpurlconnection和特殊字符

這是我的代碼:

@Override 
     protected String doInBackground(String... params) { 
      try { 

       URL url = new URL("https://xxx"); 
       HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
       String urlParameters = "&name" + name; 


       connection.setRequestMethod("POST"); 
       connection.setRequestProperty("Accept-Charset", "UTF-8"); 
       connection.setDoOutput(true); 
       DataOutputStream dStream = new DataOutputStream(connection.getOutputStream()); 
       dStream.writeBytes(urlParameters); 
       dStream.flush(); 
       dStream.close(); 


      } catch (MalformedURLException e) { 
       Log.e("-->", Log.getStackTraceString(e)); 
      } catch (IOException e) { 
       Log.e("-->", Log.getStackTraceString(e)); 
      } 
      return null; 
     } 

這HTTP POST將發送到PHP文件,從而節省值名稱到數據庫中。

例子: 應用程序發送的值 「Getränke」 導致數據庫: 「GETR」

哪裏是我的錯?

回答

0

Java中的內部字符串表示始終爲UTF-16。

當字符串進入或離開虛擬機時,每個編碼都必須完成。這意味着在你的情況下,當你將主體寫入流時,你必須設置編碼。

嘗試以下操作:

dStream.writeBytes(urlParameters.getBytes("UTF-8")); 

你也可能需要設置您的Content-Type頭的編碼。

將其設置爲"application/x-www-form-urlencoded; charset=utf-8"
當前您只設置Accept-Charset - 這會告訴服務器要發回的內容。

+0

我將它改爲'connection.setRequestProperty(「application/x-www-form-urlencoded」,「UTF-8」);?'但結果相同。和'dStream.writeBytes(urlParameters.getBytes(「UTF-8」));'做同樣的 – Stack108

+0

沒問題,我找到了解決方案:'dStream.write(urlParameters.getBytes(「UTF-8」),0,urlParameters。 getBytes(「UTF-8」)。length);' – Stack108

+0

@ Stack108是的,你也可以這樣做,它也應該可以工作。乾杯!! –

0

試試這個可能對你有幫助。

您需要在Content-Type標頭中設置編碼。

將其設置爲application/x-www-form-urlencoded; charset=utf-8。而不是 Accept-Charset

+1

爲什麼它看起來像@shriduttkothari的答案。 – AxelH