2010-01-26 3 views
4

Nous essayons de télécharger la source des pages Web, mais nous ne pouvons pas voir certains caractères spécifiques, comme ü, ö, ş, ç- proprement en raison de l'encodage des caractères. Nous avons essayé le code suivant pour convertir le codage de la chaîne (variable « texte »):Conversion de l'encodage de caractères HTML en Java

byte[] xyz = text.getBytes(); 
text = new String(xyz,"windows-1254"); 

Nous avons observé que si le codage est utf-8, nous ne pouvons toujours pas voir les pages correctement. Que devrions nous faire?

+0

vous devez montrer le code qui lit réellement les données, y compris e La déclaration du flux d'entrée et/ou du lecteur que vous utilisez. En outre, quelques exemples d'entrée (ou un lien vers la page que vous essayez de lire). –

Répondre

2

Indique au constructeur String d'utiliser le codage UTF-8 pour interpréter les octets, si vous savez que la page code son contenu en UTF-8.

Cependant, je ne suis pas sûr que ce soit l'étendue de votre problème. Vous avez déjà un "texte" avant d'essayer de le "convertir". Cela signifie que quelque chose a déjà essayé d'interpréter les octets de la page comme une chaîne, selon un certain codage. Si ce n'était pas le bon encodage, rien de ce que vous ferez plus tard ne le résoudra nécessairement. Au lieu de cela, vous devez corriger cela en amont.

byte[] bytesOfThePage = ...; 
String text = new String(bytesOfThePage, "UTF-8"); 
0

Le problème est probablement exactement là où vous lecture, écriture et/ou l'affichage de ces caractères.

Si vous lisez ces caractères à l'aide d'un Reader, alors vous devez construire un InputStreamReader en utilisant d'abord le constructeur 2 argument dans laquelle vous pouvez passer le codage correct (donc, UTF-8) comme 2ème argument. Par exemple.

reader = new InputStreamReader(url.openStream(), "UTF-8"); 

Si vous êtes par exemple l'écriture de ces caractères dans un fichier, vous devez construire un OutputStreamWriter utilisant le constructeur 2 argument dans laquelle vous pouvez passer le codage correct (donc, UTF-8) comme 2ème argument. Par exemple.

writer = new OutputStreamWriter(new FileOutputStream("/page.html"), "UTF-8"); 

Si vous êtes par exemple, il écrit tout vanilles au stdout (par exemple System.out.println(line) et ainsi de suite, vous devez vous assurer que le stdout lui-même utilise l'encodage correct (donc, UTF-8). Dans un IDE tels que Eclipse vous pouvez le configurer par fenêtre> Préférences > général > Espace de travail >encodage.