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)) // Выводит: ¢

const euro = Buffer.from([0xe2, 0x82, 0xac])
console.log(decoder.write(euro)) // Выводит: €
js
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, символа евро (€), записываются за три отдельных операции:

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]))) // Выводит: €
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]))) // Выводит: €

Класс: 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().