Conversion de UTF-8 en ISO-8859-1 en Java
Je suis de la lecture d'un document XML (UTF-8) et en fin de compte, l'affichage du contenu sur une page Web à l'aide de l'ISO-8859-1. Comme prévu, il y a quelques caractères ne sont pas affichés correctement, comme “
–
et ’
(qu'ils apparaissent comme (?).
Est-il possible de convertir ces caractères UTF-8 en ISO-8859-1?
Voici un extrait de code que j'ai écrit à cette tentative:
BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line);
}
br.close();
byte[] latin1 = sb.toString().getBytes("ISO-8859-1");
return new String(latin1);
Je ne suis pas tout à fait sûr de ce qui va de travers, mais je crois que c'est readLine() qui est à l'origine de la douleur (depuis les chaînes seraient Java/codé en UTF-16?). Une autre variante que j'ai essayé était de remplacer latin1 avec
byte[] latin1 = new String(sb.toString().getBytes("UTF-8")).getBytes("ISO-8859-1");
J'ai lu les posts précédents sur le sujet et j'apprends que je vais. Merci d'avance pour votre aide.
source d'informationauteur Chocula
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas si il y a une normalisation de la routine de la bibliothèque standard, qui va le faire. Je ne pense pas que la conversion des "guillemets" est gérée par la norme Unicode normalisateur routines, - mais ne pas me citer.
La chose la plus intelligente à faire est de vider ISO-8859-1 et commencer à utiliser
UTF-8
. Cela dit, il est possible d'encoder tout normalement autorisés point de code Unicode en une page HTML encodé commeISO-8859-1
. Vous pouvez encoder à l'aide de les séquences d'échappement comme indiqué ici:Exemple d'utilisation:
Ci-dessus, le caractère à la GAUCHE de GUILLEMETS DOUBLES (
U+201C
“ ) est codée comme “. Un couple de d'autres arbitraire des points de code sont également codées.De soins doit être prise avec cette approche. Si votre texte doit être échappés HTML, ce qui doit être fait avant le code ci-dessus ou de l'esperluette à la fin échappé.
En fonction de votre encodage par défaut, les lignes suivantes pourraient causer des problèmes,
En Java, Chaîne/Char est toujours en UTF-16BE. Codage différent intervient uniquement lorsque vous convertir les caractères en octets. Dire que votre encodage par défaut est UTF-8, le
latin1
tampon est traité comme de l'UTF-8 et une séquence de Latin-1 peuvent former UTF-8 non valide l'ordre et vous obtiendrez ?.lorsque vous instancier votre objet String, vous devez indiquer l'encodage à utiliser.
Pour le remplacer :
par
Avec Java 8, McDowell répondre peut être simplifiée comme ceci (tout en préservant la bonne gestion de paires de substitution):