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

青灯夜游
リリース: 2021-05-14 11:00:36
転載
2682 人が閲覧しました

この記事では、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 オブジェクトを渡します を返します。それに応じて、対応する文字列 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 モジュールがそれを処理する方法。

最初に、

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

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

を再度呼び出し、残りの 1 バイトを渡し、正常に Good を返します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><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><div class="contentsignin">ログイン後にコピー</div></div>

例: 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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート