2012-11-19 7 views
5

Ich versuche, einige Daten von einem webpage mit Nodejs zu kratzen, aber ich habe Probleme mit der Zeichenkodierung. Die Webseite besagt, dass es Codierung ist: <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> Und wenn ich es mit Chrom durchsuchen, setzt er Codierung auf Windows-1250 und alles sieht gut aus.Korrekte Zeichenfolge von windows-1250 codierte Webseite mit node.js

Da es keine Windows-1250 Encodierung/Decodierung für Streams in Node gibt (und UTF8 hat nicht funktioniert), fand ich ein iconv-lite-Paket, das in der Lage sein sollte, zwischen verschiedenen Kodierungen leicht zu konvertieren. Aber ich bekomme immer noch falsche Zeichen, nachdem ich die Antwort in eine Datei gespeichert habe (oder in die Konsole ausgegeben habe). Ich probierte auch verschiedene Kodierungen, native Knoten Buffer-Kodierungen, Kopfzeilen auf das gleiche wie das, was ich in chrome (Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3), aber nichts scheint richtig zu funktionieren.

Sie können den ganzen Code hier sehen https://gist.github.com/4110999.

Ich vermisse etwas Grundlegendes hinsichtlich, wie die Kodierung funktioniert, also würde irgendeine Hilfe, wie man die Daten mit korrekten Buchstaben erhält, geschätzt.

EDIT:
Auch das Node-Iconv-Paket ausprobiert, falls es ein Paketproblem ist. Geändert Linie 51 zu:

var decoder = new Iconv_native('WINDOWS-1250', 'UTF-8'); 
var decoded = decoder.convert(body).toString(); 

aber immer noch die gleichen Ergebnisse.

Antwort

1

Ich bin mit dem iconv-lite Paket nicht vertraut, sondern durch es Code suchen, sieht es aus wie Sie win1250 statt windows1250 (siehe here)

Die Codierungen sind nachgeschlagen als a hash verwenden müssen .

Auch verwendet die readme diesen Code anstelle von 'Windows-1251':

str = iconv.decode(buf, 'win1251'); 
+0

Hallo, ich ging auch den Code durch und es scheint, dass die Kodierungen als Synonyme organisiert sind, also 1250 == win1250 == windows1250. Ich habe es trotzdem versucht und es gibt die gleichen Ergebnisse. win1251 funktioniert auch nicht, das Ergebnis ist anders, aber Nicht-ASCII-Zeichen sind immer noch Kauderwelsch. – aocenas

0

Ich denke, Sie String konvertieren, aber Sie müssen ein rohen Bytes konvertieren! Wenn (Sie etwas von Web lesen, können Sie es als binäres lesen muss)

Beispiel Lesen der Datei in Win-1250 von der Festplatte:

var Buffer = require('buffer').Buffer; 
var Iconv = require('iconv').Iconv; 

//without options (encoding is not specified), 'fs' reads as raw bytes. 
var bytes= fs.readFileSync('myFile.txt'); 
//this is bad: var myBadString = fs.readFileSync('myFile.txt', { encoding: "UTF-8" }); 

var buf = new Buffer(bytes, 'binary'); 
var translated = new Iconv('CP1250', 'UTF8').convert(buf).toString(); 
Verwandte Themen