ホームページ  >  記事  >  ウェブフロントエンド  >  Nodejsのstring_decoderモジュールを使用してバッファを文字列に変換します

Nodejsのstring_decoderモジュールを使用してバッファを文字列に変換します

青灯夜游
青灯夜游転載
2021-05-14 11:00:362688ブラウズ

この記事では、string_decoder モジュールを使用して、Nodejs でバッファを文字列に変換する方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

Nodejsのstring_decoderモジュールを使用してバッファを文字列に変換します

モジュールの紹介

string_decoderこのモジュールは、Buffer を対応する文字列に変換するために使用されます。ユーザーは、stringDecoder.write(buffer) を呼び出すことで、バッファに対応する文字列を取得できます。 [推奨される学習: "nodejs チュートリアル "]

これの特別な点は、受信バッファーが不完全な場合 (たとえば、3 バイトの文字のうち 2 バイトだけが渡される) であることです。内部バッファは不完全なバイトをキャッシュするために内部的に維持され、ユーザーが stringDecoder.write(buffer) を再度呼び出して残りのバイトを渡して完全な文字をスペルアウトするまで待機します。

これは、不完全なバッファーによって引き起こされるエラーを効果的に回避でき、ネットワーク リクエストでのパッケージ本体の解析など、多くのシナリオで非常に役立ちます。

入門例

このセクションでは、decode.write(buffer)decode.end([buffer])# をそれぞれ説明します。 . ##2 つの主要な API の使用。

例 1:

decoder.write(buffer)呼び出しは Buffer オブジェクトを渡します4906621e4f28d4de4703165e1c48080e を返します。それに応じて、対応する文字列 you;

const StringDecoder = require('string_decoder').StringDecoder;
const decoder = new StringDecoder('utf8');

// Buffer.from(&#39;你&#39;) => <Buffer e4 bd a0>
const str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0]));
console.log(str);  // 你

例 2:

decoder.end([buffer]) が呼び出されるとき、内部の残りのバッファはすぐに返されます。この時点で buffer パラメータを指定すると、decoder.write(buffer)decoder.end() を同時に呼び出すことと同じになります。

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.end(Buffer.from([0xbd]));
console.log(str);  // 好

例: 複数バイトを複数回書き込む

次の例は、複数バイトを複数回書き込む方法を示しています

string_decoder モジュールがそれを処理する方法。

最初に、

efba047232e9c30493e472f2bf6fc120 が渡されます。Healthy はまだ 1 バイト不足ですが、この時点では、decoder.write (xx)あなたを返します次に、

decoder.write(Buffer.from([0xbd]))

を再度呼び出し、残りの 1 バイトを渡し、正常に Good を返します。 <pre class="brush:js;toolbar:false;">const StringDecoder = require(&amp;#39;string_decoder&amp;#39;).StringDecoder; const decoder = new StringDecoder(&amp;#39;utf8&amp;#39;); // Buffer.from(&amp;#39;你好&amp;#39;) =&gt; &lt;Buffer e4 bd a0 e5 a5 bd&gt; let str = decoder.write(Buffer.from([0xe4, 0xbd, 0xa0, 0xe5, 0xa5])); console.log(str); // 你 str = decoder.write(Buffer.from([0xbd])); console.log(str); // 好</pre>

例: decoder.end()の場合、バイト数が不完全

の1バイト目が渡されます。このとき、decoder.end ()

が呼び出され、

が返され、対応するバッファは になります。

const StringDecoder = require(&#39;string_decoder&#39;).StringDecoder;

// Buffer.from(&#39;好&#39;) => <Buffer e5 a5 bd>
let decoder = new StringDecoder(&#39;utf8&#39;);
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 および UTF-16 文字を表すバイトは、文字エンコーディングに適した置換文字に置き換えられます。

関連リンク

覚えておきたい UTF-8 文字「EF BF BD」 http://liudanking.com/golang/utf-8_replacement_character/

プログラミング関連の知識について詳しくは、
プログラミング ビデオ

をご覧ください。 !

以上がNodejsのstring_decoderモジュールを使用してバッファを文字列に変換しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。