2016-05-27 17 views
1

Ich kann mit meiner App eine http-Post senden. Problem ist, dass die Sonderzeichen wie ä, ö, ... nicht korrekt sind.httpurlconnection und Sonderzeichen

dies ist mein Code:

@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; 
     } 

Dieser http Beitrag zu einer PHP-Datei senden, die den Wert Name in einer Datenbank speichert.

Beispiel: Die App den Wert "Getränke" Ergebnis in der Datenbank senden: "Getr"

wo ist mein Fehler?

Antwort

0

Die interne Zeichenfolgendarstellung in Java ist immer UTF-16.

Jede Codierung muss vorgenommen werden, wenn Strings in die VM eintreten oder diese verlassen. Das bedeutet, dass Sie in Ihrem Fall die Codierung festlegen müssen, wenn Sie den Body in den Stream schreiben.

Versuchen mit folgenden:

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

Darüber hinaus müssen Sie möglicherweise die Codierung in Ihren Content-Type-Header setzen.

Setzen Sie es auf "application/x-www-form-urlencoded; charset=utf-8".
Derzeit setzen Sie nur Accept-Charset - dies teilt dem Server mit, was er zurücksenden soll.

+0

ich ändere es in 'connection.setRequestProperty (" application/x-www-form-urlencoded "," UTF-8 ") ;?gleiches Ergebnis. und 'dStream.writeBytes (urlParameters.getBytes (" UTF-8 "));' tue das gleiche – Stack108

+0

okay, ich fand die Lösung: 'dStream.write (urlParameters.getBytes (" UTF-8 "), 0, urlParameters. getBytes ("UTF-8"). Länge); ' – Stack108

+0

@ Stack108 ja du kannst das auch, es sollte auch funktionieren. Prost!! –

0

Versuchen Sie dies, es kann Ihnen helfen.

Sie müssen die Codierung in Ihrem Content-Type-Header festlegen.

Auf application/x-www-form-urlencoded; charset=utf-8 einstellen. anstelle von Accept-Charset.

+1

Warum sieht es wie die Antwort von @shriduttkothari aus? – AxelH