- Операторы
- Управляющие инструкции
- JS Объекты
- браузер BOM
- HTML DOM
- События
- HTML Объекты
- Промисы, async/await
- Сетевые запросы
- Бинарные данные и файлы
- ArrayBuffer, бинарные массивы
- TextDecoder и TextEncoder
- Blob
- File и FileReader
- Разное
TextDecoder и TextEncoder
TextDecoder
Встроенный объект TextDecoder позволяет декодировать данные из бинарного буфера в обычную строку.
Для этого прежде всего нам нужно создать сам декодер:
let decoder = new TextDecoder ( [label], [options] );
- label
- тип кодировки, utf-8 используется по умолчанию, но также поддерживаются big5, windows-1251 и многие другие.
- options
- объект с дополнительными настройками:
-
fatal – boolean, если значение
true
, тогда генерируется ошибка для невалидных (не декодируемых) символов, в ином случае (по умолчанию) они заменяются символом\uFFFD
. ignoreBOM– boolean, если значениеtrue
, тогда игнорируется BOM (дополнительный признак, определяющий порядок следования байтов), что необходимо крайне редко.
…и после использовать его метод decode:
let str = decoder.decode ( [input], [options] );
- input
- бинарный буфер (BufferSource) для декодирования.
- options
- объект с дополнительными настройками:
- stream – true для декодирования потока данных, при этом decoder вызывается вновь и вновь для каждого следующего фрагмента данных. В этом случае многобайтовый символ может иногда быть разделён и попасть в разные фрагменты данных. Это опция указывает TextDecoder запомнить символ, на котором остановился процесс, и декодировать его со следующим фрагментом.
Например:
let uint8Array = new Uint8Array( [72, 101, 108, 108, 111] ); alert ( new TextDecoder().decode(uint8Array) ); // Hello
let uint8Array = new Uint8Array( [228, 189, 160, 229, 165, 189] ); alert ( new TextDecoder().decode(uint8Array) ); // 你好
Мы можем декодировать часть бинарного массива, создав подмассив:
let uint8Array = new Uint8Array([0, 72, 101, 108, 108, 111, 0]); // Возьмём строку из середины массива // Также обратите внимание, что это создаёт только новое представление без копирования самого массива. // Изменения в содержимом созданного подмассива повлияют на исходный массив и наоборот. let binaryString = uint8Array.subarray(1, -1); alert( new TextDecoder().decode(binaryString) ); // Hello
TextEncoder
TextEncoder поступает наоборот – кодирует строку в бинарный массив.
Имеет следующий синтаксис:
let encoder = new TextEncoder();
Поддерживается только кодировка «utf-8».
Кодировщик имеет следующие два метода:
- encode( str )
возвращает бинарный массивUint8Array
, содержащий закодированную строку.- encodeInto( str, destination )
кодирует строку (str
) и помещает её вdestination
, который должен быть экземпляромUint8Array
.
let encoder = new TextEncoder(); let uint8Array = encoder.encode("Привет!"); alert(uint8Array); // 208,159,209,128,208,184,208,178,208,181,209,130,33