[JAVA] Caractères brouillés de tréma

phénomène

Une lettre de l'alphabet avec une distinction de prononciation, comme le tréma utilisé en allemand, s'affiche sous forme de deux lettres déformées. Par exemple, le nom de lieu Kärnten devient Kärnten.

La plupart des autres alphabets ne sont pas déformés, il est donc difficile de le remarquer (en fait, si vous recherchez sur Google avec "Kärnten", vous verrez beaucoup de sites déformés).

Cette fois, j'ai eu ce problème lors de la lecture et de l'écriture des métadonnées exif d'une image en Java.

Cause

utf-8La chaîne de caractères enregistrée sousiso-8859-1Parce qu'il a été lu comme.

Voici un exemple d'exécution avec 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]

Ainsi, "ä" est représenté par 1 octet (`-28```) dans ISO-8859-1 et 2 octets (` -61, -92) dans UTF-8. À. Si vous enregistrez une chaîne d'octets en UTF-8 puis la lisez comme ISO-8859-1, `` `` -61 est interprété comme "Ã" et -92``` est interprété comme "¤". Alors

python


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

Cela se transforme en quelque chose comme ça.

Il en va de même pour les autres distinctions de prononciation. Exemple:

Faire face

De toute évidence, spécifiez le code de caractère correct pour la lecture et l'écriture.

python


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

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

référence

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

Recommended Posts

Caractères brouillés de tréma
Correction des caractères déformés dans SceneBuilder 11
Les caractères japonais décrits dans MessageResources.properties sont déformés
Défi pour gérer les caractères déformés avec Java AudioSystem.getMixerInfo ()