NodeJS. Umgang mit � Zeichen-Kodierung
Ich habe Schwierigkeiten mit der Zeichenkodierung. Ich bin versucht zu kratzen die folgende url:
http://www.google.com/movies?near=Montreal&date=0
Mein code sieht wie folgt aus:
var http = require('http');
var url = require('url');
var Iconv = require('iconv').Iconv;
var location = 'montreal';
var googleMovies = url.parse("http://www.google.com/movies?near=" + location);
var req = http.request(googleMovies, function(response) {
var str = '';
response.on('data', function(chunk) {
str += chunk;
});
response.on('end', function() {
var iconv = new Iconv('latin1', 'UTF-8');
str = iconv.convert(str).toString();
console.log(str);
});
});
req.end()
Habe ich zuerst versucht, ohne:
var iconv = new Iconv('latin1', 'UTF-8');
str = iconv.convert(str).toString();
aber, was die � Zeichen.
Getestet hab ich die Quelle oben auf dieser Seite aufgeführt:
http://nlp.fi.muni.cz/projects/chared/
und es scheint ihn zu erkennen als latin1, aber Dinge falsch sein könnte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den � Zeichen kommen aus der Verkettung:
Dieser wandelt jedes
chunk
zu einemString
mit der defaultencoding
vonutf8
. Alle Sequenzen in derBuffer
s, die sind nicht gültig UTF-8 verloren und ersetzt durch � an dieser Stelle.Werden Sie wollen, lassen Sie die
chunk
s alsBuffer
s erst nach derconvert()
. Sie können abgeholt werden in eineArray
und kombiniert mitBuffer.concat()
.Wenn Sie Ihren
User-Agent
einem desktop-browser das meta-tag im HTML-und derContent-Type
im response-Header haben diecharset
auf UTF-8 eingestellt, statt latin1. Beispiel:User-Agent
und ändern Sie Verhalten sich entsprechend (z.B. Reise-Websites ändern der Preise, basierend auf Ihr Betriebssystem, Websites, senden von nur-Ressourcen bekannt, um die Arbeit mit dem browser, etc).Einen
Buffer
's default encoding ist UTF-8, das ist ein variable-width-encoding-system. Zeichen nach dem ASCII-codiert sind, mit mehreren bytes. Wenn Sie empfangen von latin1-spezifische Zeichen (codepoints > 127), müssen Sie das erste bit gesetzt ist, die eine UTF-8-decoder betrachten, wie ein multi-byte-Zeichen und führte schließlich in einen nicht zugewiesenen Codepunkt (angezeigt als �).iconv
hat eine streaming-decoder, dass können Sie leiten Sie Ihre Antwort stream.console.log
ging, die Argumente erhalten, die inend
Veranstaltung und nicht diedata
Veranstaltung. Rohrleitungen zuprocess.stdout
sollte auch funktionieren.data
, concat, und verwenden Sie die Zeichenfolge aufend
. Nur dieses mal haben Sie zu befestigen Zuhörericonv
.