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());
});