Gibt es eine Möglichkeit, die Verwendung von UTF-8 mit app engine?

Ich bin auf der Suche nach einer Erklärung, wie die app engine beschäftigt sich mit Zeichenkodierungen. Ich arbeite an einer client-server-Anwendung, wobei der server ist auf der app engine.

Dies ist eine neue Anwendung von Grund auf neu gebaut, so dass wir die Verwendung von UTF-8 überall. Der client sendet einige strings an den server über den POST -, x-www-form-urlencoded. Ich bekomme Sie und echo Sie wieder zurück. Wenn der client bekommt es zurück, es ist ISO-8859-1! Ich habe auch dieses Verhalten angezeigt, wenn Sie die Buchung in die blobstore, mit der die Parameter gesendet, die als UTF-8, multipart/form-data codiert.

Für das Protokoll, ich sehe das in Wireshark. Also ich bin mir 100% sicher, dass ich das senden von UTF-8 und erhalten ISO-8859-1. Auch ich bin nicht zu sehen, mojibake: die ISO-8859-1-kodierte strings sind völlig in Ordnung. Dies ist auch nicht ein Problem der Fehlinterpretation des Content-Type. Es ist nicht der client. Etwas auf dem Weg ist, richtig zu erkennen ich bin senden von UTF-8-Parameter, jedoch ist die Umwandlung in ISO-8859-1 aus irgendeinem Grund.

Ich bin zu der Annahme geführt, ISO-8859-1 ist die Standard-Zeichenkodierung für die GAE-servlets. Meine Frage ist, gibt es eine Möglichkeit zu sagen, GAE, nicht zu konvertieren, um ISO-8859-1 und stattdessen UTF-8 überall?

Lassen Sie uns sagen, dass das servlet nicht so etwas wie dieses:

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    resp.setContentType("application/json");
    String name = req.getParameter("name");
    String json = "{\"name\":\"" + name + "\"}";
    resp.getOutputStream().print(json);
}

Ich habe versucht Einstellung der Kodierung der Antwort und Anfrage zu "UTF-8", aber das konnte nichts ändern.

Vielen Dank im Voraus,

  • Ich weiß nicht, über GÄ, aber Ihre API sieht wie J2EE-Servlets. Gibt es ISO-8859-1 ist ja die Standardeinstellung. Verwenden resp.setCharacterEncoding() um die Codierung ändern oder print-Binär-Dateien direkt.
  • GAE verwendet, die gleiche API. Ich habe versucht, die Codierung des Zeichensatzes in der Antwort bereits, es funktioniert nicht. 🙁 Danke, aber.
  • Ich habe nicht verwendet, appengine, sondern mit allen Anwendungsserver verwenden, musste ich einen filter implementieren, zu zwingen, die Codierung UTF-8 (wegen des 'Problems' Zeiss erwähnt...dumm servlet spec). Sie können kopieren Sie den filter aus tomcat wenn Sie nicht möchten, das Rad neu zu erfinden.
  • Hast du dies gelesen? macgyverdev.blogspot.com.ar/2011/09/...
  • Nein, habe ich nicht versuchen, dass. Die links, die ich gesehen habe nutzen Spring, ich bin nicht mit Spring. Dein link ist nicht geladen hier. Ich fand, dass der code woanders, ich werde give it a shot, und zurück zu dir, vielen Dank.
  • Ja, es Spring verwendet. Ich bin nicht mit Spring.
  • nur FTR, siehe die Antwort von leonboy. Es funktioniert nicht im SPIEL, offenbar. 🙁
  • Hinweise für die Fehlersuche: was bedeutet resp.getCharacterEncoding() gibt ? (kurz vor der resp.getOutputStream() ). Setzen Sie die Zeichenkodierung, die nach dem Aufruf von setContentType und vor getOutputStream()? Was passiert, wenn statt getOutputStream (), die Sie verwenden getWriter() ?

InformationsquelleAutor fnf | 2012-08-10
Schreibe einen Kommentar