English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Aujourd'hui, lors de la requête HTTP avec nodejs, les données retournées sont un fichier html, puis je continue à utiliser la méthode d'analyse de données JSON que j'utilisais auparavant. Comme prévu, une erreur s'est produite : SyntaxError : token inattendu dans le JSON à la position 0
Il n'y a qu'à essayer une autre méthode, convertir l'objet Buffer reçu en chaîne de caractères toString, puis l'imprimer et on découvre qu'il s'agit de caractères brouillés.
La première impression est un problème d'encodage, google une fois et regardez la documentation officielle, résumez trois méthodes :
1、Ajouter le format d'encodage en tant que paramètre à toString .
2、Utiliser iconv-Lite changer l'encodage.
3、Charger l'HTML avec cheerio.
Cependant, les trois méthodes mentionnées ci-dessus ne sont pas à l'origine de mon erreur, puis j'ai vu que quelqu'un sur cnode avait un problème similaire, bien que ce ne soit pas tout à fait le même, quelqu'un dans les réponses a mentionné l'utilisation de la compression gzip, après décompression, cela peut entraîner un codage incorrect, puis j'ai trouvé dans l'en-tête de ma requête que la compression gzip = = j'ai manuellement caché le visage.
Une fois le problème identifié, la solution est facile.
Tout d'abord, installons zlib avec npm install zlib ;
Ensuite, j'ai inclus en haut de mon fichier var zlib = require('zlib');
Ensuite, j'ai consulté la documentation officielle et découvert qu'il y a deux méthodes de décompression, l'une étant synchronisée et l'autre asynchrone.
Je vais utiliser la méthode asynchrone ici.
zlib.unzip(chunk, function(error, res) { console.log(error); console.log(res+""); });
Ici, le chunk est notre objet buffer reçu. Il convient de noter que le callback asynchrone a deux paramètres, le premier étant le message d'erreur et le second étant la chaîne de caractères html nécessaire.
Si vous devez utiliser la synchronisation, veuillez appeler zlib.unzipSync(buffer); ps: cela signifie que j'ai reçu une erreur lors de mes tests. Error: unexpected end of file
Très bien, à ce point, mon problème est parfaitement résolu.
Ceci est le contenu que je partage avec vous concernant le problème de codage incorrect de la réponse HTML utilisant HTTP request dans NodeJS, j'espère que cela peut vous servir de référence, et j'espère que vous continuerez à soutenir le tutoriel à criar.