3 votes

Comment coder/décoder l'encodage des jeux de caractères dans NodeJS ?

J'ai ce code :

request({ url: 'http://www.myurl.com/' }, function(error, response, html) {
  if (!error && response.statusCode == 200) {
    console.log($('title', html).text());
  }
});

Mais les sites web que j'explore peuvent avoir des jeux de caractères différents (utf8, iso-8859-1, etc.). Comment les obtenir et encoder/décoder le html toujours avec le bon encodage (utf8) ?

Merci et désolé pour mon anglais ;)

2voto

Ben Dowling Points 2849

Le site web peut renvoyer l'encodage du contenu dans l'en-tête content-type ou la balise méta content-type dans le code HTML renvoyé, par exemple :

<meta http-equiv="Content-Type" content="text/html; charset=latin1"/>

Vous pouvez utiliser le jeu de caractères pour vérifier automatiquement ces deux éléments pour vous. Cependant, tous les sites web ou serveurs ne spécifient pas un encodage, vous devrez donc vous rabattre sur la détection du charset à partir des données elles-mêmes. Le module jschardet peut vous aider à cet égard.

Une fois que vous avez déterminé le jeu de caractères, vous pouvez utiliser le module iconv pour effectuer la conversion. Voici un exemple complet :

request({url: 'http://www.myurl.com/', encoding: 'binary'}, function(error, response, html) {
    enc = charset(response.headers, html)
    enc = enc or jchardet.detect(html).encoding.toLowerCase()
    if enc != 'utf-8'
        iconv = new Iconv(enc, 'UTF-8//TRANSLIT//IGNORE')
        html = iconv.convert(new Buffer(html, 'binary')).toString('utf-8')
    console.log($('title', html).text());
});

0voto

dhruvbird Points 1553

Tout d'abord, vous pouvez envoyer un Accept-Charset qui empêcherait les sites web d'envoyer des données dans d'autres jeux de caractères.

Une fois que vous avez reçu une réponse, vous pouvez vérifier le numéro d'identification de l'utilisateur. Content-Type pour l'en-tête jeu de caractères et effectuer le traitement approprié.

Une autre astuce (que j'ai utilisée dans le passé) lorsque l'encodage du contenu est inconnu est d'essayer de décoder en utilisant tous les encodages de contenu possibles et de s'en tenir à celui qui ne lève pas d'exception (à utiliser en python cependant).

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