2016-10-10 6 views
0

Ich benutze https.req, um einige XML-Dateien zu erhalten. i erhalten Daten nach Rückruf zurück i diesen Puffer in bespannen konvertierenNodeJS Buffer to String Fehler

var data = Chunk.toString("utf-8"); 

mit Und dann bin Parsen ich diese XML-Datei mit objtree oder xml2js. für eine Weile war alles ok weil die Dateien wirklich klein waren und nichts schief gehen konnte. aber jetzt parse ich eine riesige XML-Datei und meine Parsen geben mir Fehler.

für ein paar Stunden dachte ich, Parser ist nur schlecht. versuchte viele von ihnen. dann entschied ich mich, validator zu verwenden, um zu überprüfen, ob etw mit xml arbeitet. also habe ich link für xml-dokument im browser verwendet, es aus dem browserfenster kopiert und mein xml doc inspiziert. Alles sah gut aus. aber dann verwenden i

console.log(data); 

und es gab mir dieses Dokument aber Validator warf mir Tonnen von Fehlern. So jetzt bin ich sicher, dass ich etw falsch mit Puffer selbst mache. und konvertiert es in eine Zeichenfolge.

Fehler waren nicht geschlossene Tags, unvollendete Zeilen leere Attribute und Werte.

Antwort

0

Es gibt ein paar Probleme hier:

Die erste ist, dass (unter der Annahme Chunk ist, was ich denke, es ist), sollten nicht alle Ihre Daten übernehmen wird in einem einzigen 'data' Ereignis kommen, so dass Sie benötigen puffern empfangene Chunks und verwenden Sie die gepufferten Daten, sobald Sie das Ereignis im Antwortstream sehen. Wenn Sie zu UTF-8 konvertieren, möchten Sie wahrscheinlich stattdessen response.setEncoding('utf8') aufrufen, wodurch sichergestellt wird, dass alle Multibyte-Zeichen, die über Chunks verteilt sind, nicht in ungültige Zeichenbytefolgen konvertiert werden. Sobald Sie dies tun, können Sie einfach buffer += chunk tun.

+0

ja. habe gerade einen Test gemacht. Daten kamen nicht in 1 großen Brocken :) war sich dessen nicht bewusst. Ich habe meinen Tag gerettet! –