2016-05-27 8 views
1

私のアプリでhttp投稿を送ることができます。 問題は、ä、öなどの特殊文字が正しくないことです。httpurl接続と特殊文字

これは私のコードです:

@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ポストがデータベースに値の名前を節約するPHPファイルに送信されます。

例: アプリケーションがデータベースに値 "Getränke" 結果を送信する: "GETR"

私のミスですが?

答えて

0

Javaの内部文字列表現は、常にUTF-16です。

文字列がVMに出入りするときには、すべてのエンコーディングが必要です。つまり、ストリームに本文を書き込むときにエンコーディングを設定する必要があります。

次のように試してみてください。

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

なぜそれは@shriduttothの回答と同じように見えますか? – AxelH