ЧÑо еÑли бинаÑнÑе даннÑе ÑакÑиÑеÑки ÑвлÑÑÑÑÑ ÑÑÑокой? ÐапÑимеÑ, Ð¼Ñ Ð¿Ð¾Ð»ÑÑили Ñайл Ñ ÑекÑÑовÑми даннÑми.
ÐÑÑÑоеннÑй обÑÐµÐºÑ 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("Hello");
alert(uint8Array); // 72,101,108,108,111
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)