1 votes

Comment lire les textes non anglais en Java? Ils sont représentés dans un encodage incorrect

Je utilise apache HttpClient. Et lorsque j'essaie de "lire le site", tout le contenu non-anglais est mal représenté.

En fait, il est représenté en windows-1252 mais il devrait être en UTF-8. Comment puis-je corriger cela?

J'ai essayé d'utiliser InputStreamReader (inputStream, Charset.forName ("UTF-8")), mais cela n'a pas aidé (les mauvais symboles se sont transformés en ????????).

2voto

Jon Skeet Points 692016

Si le fichier est en Windows-1252, lui dire d'utiliser UTF-8 ne va pas fonctionner. Donnez-lui Windows-1252 comme nom de jeu de caractères, puis vous pourrez lire les données correctes. Savoir dans quel format les données devraient être n'est pas aussi utile que de savoir dans quel format elles sont réellement :)

C'est à vous de décider si vous le réécrivez ensuite en UTF-8...

0voto

beny23 Points 14428

Trouver le bon codage de caractères peut être un cauchemar. Selon le contenu de votre site, les informations suivantes pourraient être utiles. Une chose que j'ai faite dans le passé est de compter sur une classe qui utilisera plusieurs méthodes pour déterminer le bon codage de caractères :

Le XmlReader du projet rome utilisera l'indicateur d'ordre des octets UTF et/ou les déclarations XML pour déterminer le codage correct.

Vous pourriez donc utiliser la structure suivante :

new BufferedReader(new XmlReader(inputStream))

pour accéder au contenu.

0voto

ZZ Coder Points 36990

Si la page a un encodage dans l'en-tête "Content-Type", HttpClient le respectera. Sinon, il supposera Latin-1, pas Windows-1252. Êtes-vous sûr que vous utilisez Windows-1252? Vous pouvez vérifier l'encodage comme ceci,

String encoding = method.getResponseCharSet();

Si vous savez que la réponse utilise en effet UTF-8 mais que l'en-tête ne l'a pas spécifié, vous pouvez forcer la lecture en UTF-8 comme ceci,

byte[] body = method.getResponseBody();
String response = new String(body, "UTF-8");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X