[JAVA] Umlauts verstümmelte Charaktere

Phänomen

Ein Buchstabe des Alphabets mit einer Ausspracheunterscheidung, wie der auf Deutsch verwendete Umlaut, wird als zwei verstümmelte Buchstaben angezeigt. Zum Beispiel wird der Ortsname Kärnten zu Kärnten.

Die meisten anderen Alphabete sind nicht verstümmelt, daher ist es schwer zu bemerken (wenn Sie mit "Kärnten" googeln, werden Sie viele verstümmelte Websites sehen).

Dieses Mal hatte ich dieses Problem beim Lesen und Schreiben der Exif-Metadaten eines Bildes in Java.

Ursache

utf-8Die Zeichenkette gespeichert alsiso-8859-1Weil es als gelesen wurde.

Unten finden Sie ein Beispiel für die Ausführung mit Java REPL.

python


java> String s = new String("Kärnten")

java> byte[] iso = s.getBytes("ISO-8859-1")
byte[] iso = [75, -28, 114, 110, 116, 101, 110]

java> byte[] utf8 = s.getBytes("UTF-8")
byte[] utf8 = [75, -61, -92, 114, 110, 116, 101, 110]

Somit wird "ä" in ISO-8859-1 durch 1 Byte ("-28") und in UTF-8 durch 2 Byte ("-61, -92") dargestellt. Zu. Wenn Sie eine Byte-Zeichenfolge in UTF-8 speichern und dann als ISO-8859-1 lesen, wird `-61``` als" Ã "und` -92``` als "¤" interpretiert. Damit

python


java> new String(utf8, "ISO-8859-1")
Kärnten

Es wird so etwas.

Gleiches gilt für andere Ausspracheunterscheidungen. Beispiel:

Bewältigung

Geben Sie natürlich den richtigen Zeichencode zum Lesen und Schreiben an.

python


java> new String(utf8, "ISO-8859-1");
Kärnten

java> new String(iso, "ISO-8859-1");
Kärnten

Referenz

https://forum.httrack.com/readmsg/18923/indexhtml

Recommended Posts

Umlauts verstümmelte Charaktere
Korrigieren Sie verstümmelte Zeichen in SceneBuilder 11
In MessageResources.properties beschriebene japanische Zeichen sind verstümmelt
Herausforderung, mit verstümmelten Zeichen mit Java AudioSystem.getMixerInfo () umzugehen