3 votes

Comment récupérer une page HTML dans le bon encodage en utilisant Java ?

Comment puis-je lire le flux HTTP avec une page HTML dans l'encodage de la page ?

Voici un fragment de code que j'utilise pour obtenir le flux HTTP. InputStreamReader a l'argument optionnel encodage, mais je n'ai aucune idée de la façon de l'obtenir.

URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader d = new BufferedReader(new InputStreamReader(is));

4voto

cletus Points 276888

La récupération d'une page Web est un processus relativement compliqué. C'est pourquoi des bibliothèques telles que HttpClient exister. Je vous conseille d'utiliser HttpClient, sauf si vous avez une raison impérieuse de ne pas le faire.

3voto

Niger Points 894

Lorsque la connexion est établie par

URLConnection conn = url.openConnection() ;

vous pouvez obtenir le nom de la méthode d'encodage par url.getContentEncoding(), donc passez cette chaîne à InputStreamReader() pour que le code soit le suivant

BufferedReader d = new BufferedReader(new InputStreamReader(is,url.getContentEncoding())) ;

1voto

Yishai Points 42417

La réponse courte est URLConnexion.getContentEncoding() . La bonne réponse est celle suggérée par Cletus : utilisez une bibliothèque tierce appropriée, sauf si vous avez une raison impérative de ne pas le faire.

0voto

Sebi Points 1759

J'ai eu un problème très similaire à résoudre récemment. Comme les autres réponses, j'ai aussi commencé à jouer avec HttpClient et autres. Cependant, ces bibliothèques exigent que vous connaissiez d'avance l'encodage du fichier que vous voulez télécharger. Sinon, la conversion du fichier HTML récupéré donnera des caractères illisibles.

Cette approche ne fonctionnera pas, car l'encodage du fichier HTML n'est spécifié que dans le fichier HTML lui-même. En fonction de la version HTML, l'encodage est spécifié de nombreuses manières différentes, comme l'en-tête XML, deux éléments de métabalises head différents, etc. Si vous suivez cette approche, vous devrez :

  1. Téléchargez le fichier et regardez le contenu pour déterminer l'encodage en analysant le contenu HTML.
  2. Téléchargez le fichier une seconde fois pour spécifier le bon encodage.

L'analyse syntaxique du contenu HTML pour trouver les chaînes d'encodage appropriées est particulièrement sujette aux erreurs. Je vous suggère plutôt de vous appuyer sur une bibliothèque telle que JSoup qui fera le travail pour vous. Ainsi, au lieu de télécharger le fichier via httpclient, utilisez JSoup pour récupérer le fichier à votre place. En outre, JSoup fournit une API intéressante pour accéder directement à différentes parties de la page HTML (par exemple, le titre de la page).

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