この記事では、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('你') => <Buffer e4 bd a0>
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('你好') => <Buffer e4 bd a0 e5 a5 bd> 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
を返します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">const StringDecoder = require(&#39;string_decoder&#39;).StringDecoder;
const decoder = new StringDecoder(&#39;utf8&#39;);
// Buffer.from(&#39;你好&#39;) => <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); // 好</pre><div class="contentsignin">ログイン後にコピー</div></div>
� が返され、対応するバッファは
になります。
const StringDecoder = require('string_decoder').StringDecoder;
// Buffer.from('好') => <Buffer e5 a5 bd>
let decoder = new StringDecoder('utf8');
let str = decoder.end( Buffer.from([0xe5]) );
console.log(str); // �
console.log(Buffer.from(str)); // <Buffer ef bf bd>
公式ドキュメントではこの状況をこのように説明しています(ほとんどナンセンス) これはおおよその約束事です
utf8 コードポイントが無効な場合は、
ef bf bd に置き換えます。
関連リンク
覚えておきたい UTF-8 文字「EF BF BD」 http://liudanking.com/golang/utf-8_replacement_character/プログラミング ビデオプログラミング関連の知識について詳しくは、
以上がNodejsのstring_decoderモジュールを使用してバッファを文字列に変換しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。