J'ai lu des données de flux en encodage UTF-8Java substring encodage cassé
String line = new String(byteArray, "UTF-8");
puis essayer de trouver une séquence
int startPos = line.indexOf(tag) + tag.length();
int endPos = line.indexOf("/", startPos);
et la couper
String name = line.substring(startPos, endPos);
Dans la plupart cas ça fonctionne bien, mais parfois le résultat est cassé. Par exemple, pour le nom d'entrée comme "гордунни"
j'ai obtenu des valeurs comme "горд��нни"
, "горду��ни"
, "г��рдунни"
etc. Il semble que les paires de substitution sont rompues de manière aléatoire pour une raison quelconque. Je l'ai eu 4 fois sur 1000.
Comment le réparer? Ai-je besoin d'utiliser d'autres méthodes String au lieu de indexOf() + substring() ou d'utiliser une magie d'encodage/décodage sur mon résultat?
Est-ce problème sur Linux? Où regardez-vous des lignes «cassées»? J'ai eu le même problème dans la table SWT, mais quand j'envoie cette chaîne dans SWT Text ou Label, elle s'affiche correctement. Le plus probable est un problème d'affichage. – Nicolai
Il est vrai que les méthodes 'indexOf' et' substring' fonctionnent sur des points de code, donc potentiellement ils peuvent casser des paires de substitution, mais 'гордунни' n'a pas de paire de substitution! Etes-vous sûr que le texte a été correctement lu pour commencer? – Joni
Est-ce que cela produit le même résultat si vous ajoutez -Dfile.encoding = UTF-8 à la ligne de commande? – Alcanzar