Wie erfasse ich utf-8-Dekodierungsfehler in node.js?

Ich habe gerade den Node entdeckt (getestet: v0.8.23, aktuelles Git: v0.11.3-pre)Dekodierungsfehler werden ignoriert Ersetzen Sie in der Pufferbehandlung im Hintergrund alle Zeichen, die nicht utf8 sind, durch'\ufffd' (Unicode-ERSATZZEICHEN), anstatt eine Ausnahme für die Nicht-UTF8-Eingabe auszulösen. Als Konsequenz,fs.readFile, process.stdin.setEncoding und Freunde maskieren eine große Klasse von Eingabefehlern für Sie.

Ein Beispiel, das nicht scheitert, aber wirklich sollte:

> notValidUTF8 = new Buffer([ 128 ], 'binary')
<Buffer 80>
> decodedAsUTF8 = notValidUTF8.toString('utf8') // no exception thrown here!
'�'
> decodedAsUTF8 === '\ufffd'
true

'\ufffd' ist ein vollkommen gültiges Zeichen, das in legal utf8 (als Sequenz) vorkommen kannef bf bd), so ist es nicht trivial, Affen-Patch in der Fehlerbehandlung basierend darauf im Ergebnis auftauchen.

Wenn Sie etwas tiefer gehen, scheint dies auf einen Knoten zurückzuführen zu sein, der sich nur auf die Zeichenfolgen von v8 bezieht, und dass diese wiederum das oben beschriebene Verhalten aufweisen, da v8 keine externe Welt mit fremdcodierten Daten aufweist.

Gibt es Knotenmodule oder andere, mit denen ich Utf-8-Dekodierungsfehler abfangen kann, vorzugsweise mit dem Kontext, in dem der Fehler in der Eingabezeichenfolge oder im Puffer festgestellt wurde?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage