2011-11-30 8 views
13

que estoy usando: Module: Request -- Simplified HTTP request method para raspar una página web con caracteres acentuados á é ó ú ê ã etc.¿El módulo solicita cómo recuperar correctamente los caracteres acentuados?

He intentado ya encoding: utf-8 sin éxito. Todavía estoy obteniendo estos caracteres en el resultado.

request.get({ 
    uri: url, 
    encoding: 'utf-8' 
    // ... 

¿Hay alguna configuración para solucionarlo?

No sé si es un problema, pero I filled one for this module. No hay respuestas todavía :/

+0

Bueno, ¿en qué codificación está escrita la página web? utf8? iso-algo? – thejh

+4

Te respondí en el número (https://github.com/mikeal/request/issues/118#issuecomment-2965894). No sé por qué, pero utilicé 'binary' para la codificación y funcionó. –

+3

También para mí, simplemente agregando 'encoding: binary' funcionó muy bien – renatoargh

Respuesta

18

Desde binario está en desuso parece una mejor idea de utilizar iconv y manejar correctamente la decodificación:

var request = require("request"), iconv = require('iconv-lite'); 
var requestOptions = { encoding: null, method: "GET", uri: "http://something.com"}; 

request(requestOptions, function(error, response, body) { 
    var utf8String = iconv.decode(new Buffer(body), "ISO-8859-1"); 
    console.log(utf8String); 
}); 

La parte importante es para definir la codificación de la petición HTTP a ser nula encoding: null.

+0

Esto funciona muy bien, pero tengo dos preguntas. 1. ¿Por qué necesitas crear un nuevo Buffer para el cuerpo? Traté de usar el cuerpo directamente y no vi ninguna diferencia. ¿Qué extraño? 2. Si la página web dice charset = utf-8, ¿por qué tengo que usar iconv-lite para convertirlo a ISO-8859-1? – newman

2

Especifique la codificación como utf8 no utf-8. Aquí hay una lista de posibles codificaciones para un buffer desde the Node.js documentation.

  • ascii - para datos ASCII de 7 bits solamente. Este método de codificación es muy rápido y eliminará el bit alto si se establece.
  • utf8 - caracteres Unicode. Muchas páginas web y otros formatos de documentos usan UTF-8.
  • base64 - Codificación de cadenas Base64.
  • 'binary - Una forma de codificar datos binarios sin procesar en cadenas utilizando solo los primeros 8 bits de cada carácter. Este método de codificación se deprecia y se debe evitar a favor de los objetos Buffer donde sea posible. Esta codificación se eliminará en versiones futuras de Node.
+2

utf-8 funciona como utf8. La página que estoy descartando es iso-8859-1. La única codificación que funcionó para mí fue "binaria" ... demasiado extraña ... Discutimos sobre esto aquí https://github.com/mikeal/request/issues/118 –

+2

Binary works. gracias por el comentario. :) –

+0

binario funciona para mí. Estoy usando el módulo de solicitud, pasé la codificación: 'binario' en las opciones. Gracias –

Cuestiones relacionadas