Skip to content

Декодер строк

[Стабильно: 2 - Стабильно]

Стабильно: 2 Стабильность: 2 - Стабильно

Исходный код: lib/string_decoder.js

Модуль node:string_decoder предоставляет API для декодирования объектов Buffer в строки таким образом, чтобы сохранялись многобайтовые символы UTF-8 и UTF-16. Доступ к нему можно получить с помощью:

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().

В следующем примере три байта символа европейской валюты евро (), закодированные в UTF-8, записываются в течение трех отдельных операций:

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])

Добавлено в версии: v0.1.99

  • encoding <string> Символьная кодировка, которую будет использовать StringDecoder. По умолчанию: 'utf8'.

Создаёт новый экземпляр StringDecoder.

stringDecoder.end([buffer])

Добавлено в версии: v0.9.3

Возвращает любую оставшуюся входную информацию, хранящуюся во внутреннем буфере, в виде строки. Байты, представляющие неполные символы UTF-8 и UTF-16, будут заменены символами подстановки, подходящими для кодировки символов.

Если предоставлен аргумент buffer, выполняется один последний вызов stringDecoder.write() перед возвратом оставшегося ввода. После вызова end() объект stringDecoder можно повторно использовать для нового ввода.

stringDecoder.write(buffer)

[История]

ВерсияИзменения
v8.0.0Каждый недопустимый символ теперь заменяется одним символом замены вместо одного для каждого отдельного байта.
v0.1.99Добавлено в версии: v0.1.99

Возвращает декодированную строку, гарантируя, что все неполные многобайтовые символы в конце Buffer, TypedArray или DataView опущены из возвращаемой строки и сохранены во внутреннем буфере для следующего вызова stringDecoder.write() или stringDecoder.end().