English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Hoy, al realizar una solicitud HTTP con nodejs, los datos devueltos son un archivo html, luego sigo el método de análisis de datos json que usaba antes. De hecho, se produjo un error: SyntaxError: token inesperado en JSON en la posición 0
No se puede, solo puedo cambiar un método, convertir el objeto Buffer recibido a toString, luego imprimirlo y descubrir que es un código mezclado.
La primera sensación es un problema de codificación, busqué en google y vi la documentación oficial, resumiendo tres métodos:
1Usar toString con el formato de codificación como parámetro.
2Usar iconv-Cambiar la codificación de lite.
3Usar cheerio para cargar html.
Sin embargo, ninguno de los tres métodos mencionados anteriormente es mi error, luego vi en cnode que alguien tenía un problema similar, aunque no es exactamente el mismo, alguien mencionó que se usa la compresión gzip, y no descomprimirlo causará caracteres ilegibles, luego encontré en mi encabezado de solicitud que se estaba utilizando la compresión gzip = = me tapé la cara manualmente.
Ahora que sabemos cuál es el problema, la solución es sencilla.
Primero instalemos zlib con npm install zlib;
Luego se incluye en la cabecera var zlib = require('zlib');
Luego consulté la documentación oficial y descubrí que hay dos formas de descomprimir, una es síncrona y la otra asíncrona.
Aquí uso el modo asíncrono.
zlib.unzip(chunk, function(error, res) { console.log(error); console.log(res+"); });
Aquí el chunk es nuestro objeto buffer recibido, es necesario tener en cuenta que este callback asíncrono tiene dos parámetros, el primero es el mensaje de error y el segundo es la cadena de caracteres html necesaria.
Si necesitas usar el modo síncrono, llama a zlib.unzipSync(buffer); ps: esto es lo que me salió mal en mi prueba. Error: final inesperado de archivo
Bien, aquí, mi problema se resolvió perfectamente.
Bueno, aquí, mi problema se resolvió perfectamente.