Node (テスト済み: v0.8.23、現在の git: v0.11.3-pre)は、バッファー処理でデコード エラーを無視し、'\ufffd'
utf8 以外の文字を(Unicode REPLACEMENT CHARACTER) で例外をスローするのではなく、静かに置き換えます。非 utf8 入力。その結果、fs.readFile
、process.stdin.setEncoding
および友人は、大量の不適切な入力エラーをマスクします。
失敗しないが本当に失敗するべき例:
> notValidUTF8 = new Buffer([ 128 ], 'binary')
<Buffer 80>
> decodedAsUTF8 = notValidUTF8.toString('utf8') // no exception thrown here!
'�'
> decodedAsUTF8 === '\ufffd'
true
'\ufffd'
は正当な utf8 で (シーケンスとしてef bf bd
) 発生する可能性がある完全に有効な文字であるため、結果に表示される this に基づくエラー処理でモンキー パッチを適用することは自明ではありません。
もう少し深く掘り下げると、これはノードがv8の文字列を延期するだけであり、それらは上記の動作をしており、v8には外部でエンコードされたデータでいっぱいの外部世界がないことが原因のようです。
入力文字列またはバッファでエラーが発見された場所に関するコンテキストを使用して、utf-8 デコード エラーをキャッチできるノード モジュールなどはありますか?