2011-11-04 18 views
5

Il corpo di risposta delle richieste HTTP che utilizza il modulo "http" nativo, visualizza i caratteri del punto interrogativo per i caratteri Unicode invece del loro valore effettivo. Ecco lo snippet di codice di base che sto utilizzando.Problema unicode Node.js con il corpo di risposta 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); 
    }); 
}); 

Nella risposta c'è una parola specifica che inizia con "Pubblicit". La sua ultima lettera è un personaggio strano che mi mostra come un punto interrogativo. La parola dovrebbe essere Pubblicità, invece è indicata come Pubblicit?.

Ho anche provato in uscita i dati utilizzando .toString():

console.log(chunk.toString()); 

o

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

Ma sto ottenendo gli stessi risultati.

Qualche idea?

+1

qual è il tuo sistema operativo? –

+2

Prova a controllare 'chunk.charCodeAt (chunk.length - 1)'. Se è '224' (' à'), il problema è con la tua console/locale. – katspaugh

+0

@PabloFernandez, usando Mac OS X Snow Leopard –

risposta

5

ragione forse che, se non si specifica un user-agent "googleKnownAsUTF8OK" su richiesta di intestazione, Google avrebbe risposta un documento HTML con contenuto-tipo di ISO-8859-1 (per il vecchio browser, bot? non so), quindi decodificare il buffer di risposta da "binario" è corretto.

Ma, se decodifichiamo un buffer codificato in ISO-8859-1 da utf8, il byte 0xe0 (à) implica "forma un carattere di 3 byte in una riga", nel nostro caso è un carattere malformato, quindi sono stati visualizzati alcuni caratteri imprevisti (a seconda dell'ambiente).

Possiamo provare "Mozilla/5.0" come valore di user-agent. In bocca al lupo.

Problemi correlati