Ich habe ein Java-Servlet, das einen Parameter String (inputString) übernimmt, der griechische Buchstaben von einer als utf-8 markierten Webseite enthalten kann. Bevor ich es auf eine Datenbank zu senden habe ich es an eine neue String (UTF8String) zu konvertieren, wie folgt:Warum muss ich einen utf-8-Parameter String zu iso-Latin codieren und dann als utf-8 dekodieren, um Java utf-8 String zu erhalten?
String utf8String = new String(inputString.getBytes("8859_1"), "UTF-8");
Dies funktioniert, aber, wie ich sei darauf hingewiesen, hoffen, hasse ich etwas verstehe ich nicht auch wenn es funktioniert.
Aus der Methodenbeschreibung in der Java-Dokumentation die getBytes() -Methode "Codiert diese Zeichenfolge in eine Sequenz von Bytes mit dem benannten Zeichensatz, Speichern des Ergebnisses in einem neuen Byte-Array", d. H. Ich es in 8859_1 - IsoLatin. Und aus der Konstruktorbeschreibung "Konstruiert einen neuen String durch Dekodieren des spezifizierten Arrays von Bytes unter Verwendung des spezifizierten Zeichensatzes", d. H. Decodiert das Byte-Array zu utf-8.
Kann mir jemand erklären, warum das nötig ist?
Wenn Sie den Ajax-Anruf von Hand codieren, welche Zeichencodierung verwenden Sie für den Aufruf, dh für die POST-Methode, die Sie an die Server? Können Sie die HTTP-Anfrage erfassen und anzeigen? – Andreas
Ich verwende eine GET-Anfrage und schaue auf meine js Ich sehe nicht die Zeichenkodierung der Anfrage angegeben. Ich verwende die JavaScript-Methode encodeURIComponent(), um die Zeichenfolge zu codieren. Ich kann die Anfrage nicht finden - verwende Mac Safari und muss in der Entwicklerkonsole an der falschen Stelle suchen. Ich frage mich nur, ob ich die Waffe gesprungen bin. Ich versuche, all die utf-8-Kodierung zu schreiben, die ich im Laufe der Jahre in etwa einem Dutzend Java-Apps verwendet habe. Ich hätte überprüfen sollen, dass diese Operation vor dem Posten wirklich notwendig war, also konnte ich mir sicher sein, wie man es bricht. Gib mir bitte Zeit dafür. – David
OK, ich habe ein anderes einfacheres Servlet, das Javascript erstellt hat, um eine Zeichenkette von einer Web-Eingabe an das Servlet zu senden. Die HTTP-Anfrage enthält das griechische Zeichen, da es sich um eine Get-Anfrage handelt, die ich in meinem URL-Feld sehen kann: http: // localhost: 8080/MidgutAtlas/index.html? Search = gen & gen = & alpha; -Est4 & idtype = symbol.Aber ich glaube nicht, dass Sie den Zeichensatz bei einer HTTP-Anfrage nur für die Antwort angeben können. Und, ja, die Codezeile ist notwendig. – David