2 Stimmen

Android: Http-Post-JSON-Zeichenfolge im UTF-8-Encoding an PHP

Dies ist eine Folgefrage zu Android mit php: Speichern von UTF-8-Zeichenfolge in MySQL

Ich verwende die Gson-Bibliothek in Android, um eine Klasseninstanz in eine JSON-Zeichenfolge umzuwandeln. Diese JSON-Zeichenfolge wird dann mit HttpPost an ein PHP-Skript hochgeladen, um sie in meiner MySQL-Datenbank zu speichern.

Anfangs dachte ich, dass das Problem mit php oder MySQL zusammenhängt, aber es scheint jetzt, dass mein HttpPost-Code die JSON-Zeichenfolge nicht ordnungsgemäß in UTF-8 kodiert. Wenn ich meinen Code debugge und eine POST-Anfrage innerhalb von Chrome mit der JSON-Zeichenfolge durchführe, funktioniert es einwandfrei.

Meine MySQL-Datenbank ist jetzt im UTF-8-Format formatiert (utf8_general_ci).

Hier ist mein HttpPost-Code:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);

ArrayList parameters = new ArrayList();
parameters.add(new BasicNameValuePair("fragebogen", json));

httppost.setEntity(new UrlEncodedFormEntity(parameters, "UTF-8"));

HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();

Das Problem könnte in httppost.setEntity(new UrlEncodedFormEntity(parameters, "UTF-8")); liegen, aber ich bin mir nicht sicher, wie ich meinem PHP-Skript anderweitig mitteilen kann, dass ich JSON im UTF-8-Format sende.

Als Beispiel wird "can't get there" von Android korrekt als "can/u0027t get there" codiert, wenn die JSON-Zeichenfolge von Gson erstellt wird. Nach dem Hochladen des JSON auf PHP wird es als "canu0027t get there" ohne das "\" in der MySQL-Datenbank gespeichert.

Wie kann ich also diese JSON-Zeichenfolge in Android ordnungsgemäß als UTF-8-Format kennzeichnen, damit sie richtig gespeichert wird?

4voto

DragonWork Punkte 2375

Sie müssen (z. B. mysql_real_escape_string()) den JSON-String in Ihrem PHP-Code escapen, bevor Sie ihn in der Datenbank speichern. Ihr Android-Code ist einfach korrekt.

-1voto

user4165523 Punkte 11

Dies ist die Lösung:

StringEntity se = new StringEntity(jObjEnvio.toString(), HTTP.UTF_8);

Wenn dies nicht funktioniert, bereinigen und reparieren Sie das Projekt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X