Ich habe gerade festgestellt, dass Knoten (getestet: v0.8.23, aktuelle Git: v0.11.3-pre) ignores any decoding errors in seiner Puffer-Handhabung, stillschweigend alle Nicht-UTF8-Zeichen mit '\ufffd'
ersetzen (das Unicode ERSATZ CHARACTER), anstatt eine Ausnahme zu werfen die Nicht-UTF8-Eingabe. Als Konsequenz maskieren fs.readFile
, process.stdin.setEncoding
und Freunde eine große Klasse schlechter Eingabefehler für Sie.Wie kann ich UTF-8-Dekodierungsfehler in node.js erfassen?
Beispiel, die nicht scheitern, aber wirklich soll:
> notValidUTF8 = new Buffer([ 128 ], 'binary')
<Buffer 80>
> decodedAsUTF8 = notValidUTF8.toString('utf8') // no exception thrown here!
'�'
> decodedAsUTF8 === '\ufffd'
true
'\ufffd'
ist ein perfekt gültiges Zeichen, die in Recht utf8 (als Folge ef bf bd
) auftreten können, so dass es nicht trivial ist, Affen- Patch in der Fehlerbehandlung basierend darauf, dass dies im Ergebnis angezeigt wird.
Wenn man ein wenig tiefer geht, sieht es so aus, als käme dies vom Knoten, der sich nur auf die Strings von v8 zurückzieht und diese wiederum das obige Verhalten haben, v8 keine externe Welt mit fremdcodierten Daten.
Gibt es Node-Module oder andere, die mich UTF-8-Dekodierungsfehler abfangen können, vorzugsweise mit dem Kontext, wo der Fehler in der Eingabezeichenfolge oder dem Puffer entdeckt wurde?
Während ich bin nicht sicher, aber haben Sie auf dem Codiermodul aussah. Es kann einen Weg bieten, um Ihr Problem zu umgehen. https://npmjs.org/package/encoding –
Die Decodierung von Hand (gut, wie in "nicht mit Knoten Primitiven") sollte sicher sein; iconv via 'encoding' ist wahrscheinlich der Weg dahin, wo dieser Bedarf besteht. – ecmanaut