14

Node (テスト済み: v0.8.23、現在の git: v0.11.3-pre)は、バッファー処理でデコード エラーを無視し、'\ufffd' utf8 以外の文字を(Unicode REPLACEMENT CHARACTER) で例外をスローするのではなく、静かに置き換えます。非 utf8 入力。その結果、fs.readFileprocess.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 デコード エラーをキャッチできるノード モジュールなどはありますか?

4

3 に答える 3

0

Josh C.が上で言ったように:「npmjs.org/package/encoding」

npm Web サイトから:「encoding は、文字列をあるエンコーディングから別のエンコーディングに変換するための node-iconv と iconv-lite の単純なラッパーです。」

ダウンロード: $ npm install encoding

使用例

var result = encoding.convert(new Buffer([ 128 ], 'binary'), "utf8");
console.log(result); //<Buffer 80>

サイトにアクセスしてください: npm - エンコーディング

于 2013-11-10T02:27:46.427 に答える