Skip to content

String decoder

[Stable: 2 - 安定版]

Stable: 2 安定版: 2 - 安定版

ソースコード: lib/string_decoder.js

node:string_decoder モジュールは、エンコードされたマルチバイトの UTF-8 および UTF-16 文字を保持する方法で、Buffer オブジェクトを文字列にデコードするための API を提供します。これは以下を使用してアクセスできます:

js
import { StringDecoder } from 'node:string_decoder';
js
const { StringDecoder } = require('node:string_decoder');

次の例は、StringDecoder クラスの基本的な使用法を示しています。

js
import { StringDecoder } from 'node:string_decoder';
import { Buffer } from 'node:buffer';
const decoder = new StringDecoder('utf8');

const cent = Buffer.from([0xC2, 0xA2]);
console.log(decoder.write(cent)); // Prints: ¢

const euro = Buffer.from([0xE2, 0x82, 0xAC]);
console.log(decoder.write(euro)); // Prints: €
js
const { StringDecoder } = require('node:string_decoder');
const decoder = new StringDecoder('utf8');

const cent = Buffer.from([0xC2, 0xA2]);
console.log(decoder.write(cent)); // Prints: ¢

const euro = Buffer.from([0xE2, 0x82, 0xAC]);
console.log(decoder.write(euro)); // Prints: €

Buffer インスタンスが StringDecoder インスタンスに書き込まれると、デコードされた文字列に不完全なマルチバイト文字が含まれないようにするために、内部バッファーが使用されます。これらは、stringDecoder.write() の次の呼び出しまで、または stringDecoder.end() が呼び出されるまで、バッファーに保持されます。

次の例では、ヨーロッパのユーロ記号 () の 3 つの UTF-8 エンコードされたバイトが、3 つの別々の操作で書き込まれています。

js
import { StringDecoder } from 'node:string_decoder';
import { Buffer } from 'node:buffer';
const decoder = new StringDecoder('utf8');

decoder.write(Buffer.from([0xE2]));
decoder.write(Buffer.from([0x82]));
console.log(decoder.end(Buffer.from([0xAC]))); // Prints: €
js
const { StringDecoder } = require('node:string_decoder');
const decoder = new StringDecoder('utf8');

decoder.write(Buffer.from([0xE2]));
decoder.write(Buffer.from([0x82]));
console.log(decoder.end(Buffer.from([0xAC]))); // Prints: €

クラス: StringDecoder

new StringDecoder([encoding])

Added in: v0.1.99

新しい StringDecoder インスタンスを生成します。

stringDecoder.end([buffer])

Added in: v0.9.3

内部バッファに格納されている残りの入力を文字列として返します。 不完全な UTF-8 および UTF-16 文字を表すバイト列は、文字エンコーディングに適した代替文字に置き換えられます。

buffer 引数が指定されている場合、残りの入力が返される前に、stringDecoder.write() への最後の呼び出しが 1 回実行されます。 end() が呼び出されると、stringDecoder オブジェクトを新しい入力に再利用できます。

stringDecoder.write(buffer)

[履歴]

バージョン変更
v8.0.0各無効な文字は、個々のバイトごとに 1 つではなく、単一の代替文字で置き換えられるようになりました。
v0.1.99Added in: v0.1.99

デコードされた文字列を返します。BufferTypedArray、または DataView の末尾にある不完全なマルチバイト文字は、返された文字列から省略され、stringDecoder.write() または stringDecoder.end() の次回の呼び出しのために内部バッファに格納されます。