この記事では、string_decoder モジュールを使用して、Nodejsでバッファを文字列に変換する方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
string_decoder
このモジュールは、Buffer を対応する文字列に変換するために使用されます。ユーザーは、stringDecoder.write(buffer)
を呼び出すことで、バッファに対応する文字列を取得できます。 [推奨される学習: "nodejs チュートリアル"]
これの特別な点は、受信バッファーが不完全な場合 (たとえば、3 バイトの文字のうち 2 バイトだけが渡される) であることです。内部バッファは不完全なバイトをキャッシュするために内部的に維持され、ユーザーがstringDecoder.write(buffer)
を再度呼び出して残りのバイトを渡して完全な文字をスペルアウトするまで待機します。
これは、不完全なバッファーによって引き起こされるエラーを効果的に回避でき、ネットワーク リクエストでのパッケージ本体の解析など、多くのシナリオで非常に役立ちます。
このセクションでは、decode.write(buffer)
、decode.end([buffer])# をそれぞれ説明します。 . ##2 つの主要な API の使用。
decoder.write(buffer)呼び出しは Buffer オブジェクトを渡します
を返します。それに応じて、対応する文字列
you
;
const StringDecoder = require('string_decoder').StringDecoder; const decoder = new StringDecoder('utf8'); // Buffer.from('你') =>const str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0])); console.log(str); // 你
decoder.end([buffer])が呼び出されるとき、内部の残りのバッファはすぐに返されます。この時点で
bufferパラメータを指定すると、
decoder.write(buffer)と
decoder.end()を同時に呼び出すことと同じになります。
const StringDecoder = require('string_decoder').StringDecoder; const decoder = new StringDecoder('utf8'); // Buffer.from('你好') =>let str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0, 0xe5, 0xa5])); console.log(str); // 你 str = decoder.end(Buffer.from([0xbd])); console.log(str); // 好
string_decoderモジュールがそれを処理する方法。
が渡されます。
Healthy
はまだ 1 バイト不足ですが、この時点では、
decoder.write (xx)
あなたを返します
。
次に、
を再度呼び出し、残りの 1 バイトを渡し、正常にGood
を返します。const StringDecoder = require('string_decoder').StringDecoder; const decoder = new StringDecoder('utf8'); // Buffer.from('你好') => <Buffer e4 bd a0 e5 a5 bd> let str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0, 0xe5, 0xa5])); console.log(str); // 你 str = decoder.write(Buffer.from([0xbd])); console.log(str); // 好
�が返され、対応するバッファは
になります。
const StringDecoder = require('string_decoder').StringDecoder; // Buffer.from('好') =>let decoder = new StringDecoder('utf8'); let str = decoder.end( Buffer.from([0xe5]) ); console.log(str); // � console.log(Buffer.from(str)); //
公式ドキュメントではこの状況をこのように説明しています(ほとんどナンセンス) これはおおよその約束事です
utf8
コードポイントが無効な場合は、
ef bf bd に置き換えます
。
#内部バッファに保存されている残りの入力を文字列として返します。不完全な UTF-8 および UTF-16 文字を表すバイトは、文字エンコーディングに適した置換文字に置き換えられます。
関連リンク
覚えておきたい UTF-8 文字「EF BF BD」 http://liudanking.com/golang/utf-8_replacement_character/ プログラミング関連の知識について詳しくは、プログラミング ビデオ
以上がNodejsのstring_decoderモジュールを使用してバッファを文字列に変換しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。