2011-11-04 27 views
5

El cuerpo de respuesta de las solicitudes HTTP que utiliza el módulo nativo 'http' muestra caracteres de interrogación para caracteres Unicode en lugar de su valor real. Aquí está el fragmento básico de código que estoy ejecutando.Problema Unicode Node.js con el cuerpo de respuesta HTTP

var http = require('http'); 
var google = http.createClient(80, 'www.google.it'); 
var request = google.request('GET', '/', 
{ 
'host': 'www.google.it', 
} 
); 
request.end(); 
request.on('response', function (response) { 
    response.setEncoding('utf8'); 
    response.on('data', function (chunk) { 
    console.log(chunk); 
    }); 
}); 

En la respuesta que hay una palabra específica que comienza con "Pubblicit". Su última letra es un personaje extraño que me muestra un signo de interrogación. La palabra debe ser Pubblicità, en su lugar se aplica como Pubblicit?.

también he intentado dar salida a los datos utilizando .toString():

console.log(chunk.toString()); 

o

console.log(chunk.toString('utf8')); 

Pero estoy obteniendo los mismos resultados.

¿Alguna idea?

+1

¿cuál es su sistema operativo? –

+2

Prueba comprobar 'chunk.charCodeAt (chunk.length - 1)'. Si es '224' (' à'), el problema está en su consola/configuración regional. – katspaugh

+0

@PabloFernandez, usando Mac OS X Snow Leopard –

Respuesta

5

Razón tal que, si no se especifica un "googleKnownAsUTF8OK" agente de usuario a petición de cabecera, Google respuesta a un documento HTML con el tipo de contenido de la norma ISO-8859-1 (por edad navegadores, bots? no lo sé), por lo que decodificar el búfer de respuesta por "binario" es correcto.

Pero, si decodificamos un búfer codificado en ISO-8859-1 por utf8, entonces el byte 0xe0 (à) implica "formar un personaje por 3 bytes en una fila", es un caracter incorrecto en nuestro caso, entonces algunos caracteres inesperados (según el entorno) se muestran.

Podemos probar "Mozilla/5.0" como valor de user-agent. Buena suerte.

Cuestiones relacionadas