string_decoder 字符串解码器
node:string_decoder
模块提供了用于将 Buffer
对象解码为字符串(以保留编码的多字节 UTF-8 和 UTF-16 字符的方式)的 API。
可以使用以下方式访问它:
const { StringDecoder } = require('node:string_decoder');
下面的示例展示了 StringDecoder
类的基本用法。
const { StringDecoder } = require('node:string_decoder');
const decoder = new StringDecoder('utf8');
const cent = Buffer.from([0xC2, 0xA2]);
console.log(decoder.write(cent));
const euro = Buffer.from([0xE2, 0x82, 0xAC]);
console.log(decoder.write(euro));
当 Buffer
实例被写入 StringDecoder
实例时,会使用内部的缓冲区来确保解码后的字符串不包含任何不完整的多字节字符。
这些都保存在缓冲区中,直到下一次调用 stringDecoder.write()
或调用 stringDecoder.end()
。
在以下示例中,欧洲欧元符号 (€
) 的三个 UTF-8 编码的字节通过三次单独的操作写入:
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])));
Source Code: lib/string_decoder.js
The node:string_decoder
module provides an API for decoding Buffer
objects
into strings in a manner that preserves encoded multi-byte UTF-8 and UTF-16
characters. It can be accessed using:
const { StringDecoder } = require('node:string_decoder');
The following example shows the basic use of the StringDecoder
class.
const { StringDecoder } = require('node:string_decoder');
const decoder = new StringDecoder('utf8');
const cent = Buffer.from([0xC2, 0xA2]);
console.log(decoder.write(cent));
const euro = Buffer.from([0xE2, 0x82, 0xAC]);
console.log(decoder.write(euro));
When a Buffer
instance is written to the StringDecoder
instance, an
internal buffer is used to ensure that the decoded string does not contain
any incomplete multibyte characters. These are held in the buffer until the
next call to stringDecoder.write()
or until stringDecoder.end()
is called.
In the following example, the three UTF-8 encoded bytes of the European Euro
symbol (€
) are written over three separate operations:
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])));