Перейти к содержанию

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

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

API является удовлетворительным. Совместимость с npm имеет высший приоритет и не будет нарушена, кроме случаев явной необходимости.

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

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

В следующем примере показано базовое использование класса StringDecoder.

1
2
3
4
5
6
7
8
9
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)); // Выводит: ¢

const euro = Buffer.from([0xE2, 0x82, 0xAC]);
console.log(decoder.write(euro)); // Выводит: €
1
2
3
4
5
6
7
8
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 для символа евро () записываются тремя отдельными операциями:

1
2
3
4
5
6
7
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]))); // Выводит: €
1
2
3
4
5
6
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]))); // Выводит: €

Класс: StringDecoder

new StringDecoder([encoding])

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

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

stringDecoder.end([buffer])

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

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

stringDecoder.write(buffer)

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

Комментарии