Ð ÑкÑо бÑнаÑÐ½Ñ Ð´Ð°Ð½Ñ Ñ Ð¿ÑоÑÑо ÑÑдком? ÐапÑиклад, ми оÑÑимали Ñайл з ÑекÑÑовими даними.
ÐбÑдований обâÑÐºÑ TextDecoder Ð´Ð°Ñ Ð·Ð¼Ð¾Ð³Ñ Ð·Ð°Ð¿Ð¸ÑаÑи Ð´Ð°Ð½Ñ Ð² JavaScript ÑÑдок Ñз заданого бÑÑеÑÑ Ð· поÑÑÑбним кодÑваннÑм.
Ðле Ð´Ð»Ñ Ð¿Ð¾ÑаÑÐºÑ Ð¹Ð¾Ð³Ð¾ Ð½ÐµÐ¾Ð±Ñ Ñдно ÑÑвоÑиÑи:
let decoder = new TextDecoder([label], [options]);
labelâ кодÑваннÑ, Ñиповоutf-8, але Ñакож пÑдÑÑимÑÑÑÑÑÑbig5,windows-1251Ñа багаÑо ÑнÑÐ¸Ñ ÐºÐ¾Ð´ÑванÑ.optionsâ необовâÑзковий обâÑкÑ, Ñкий Ð·Ð°Ð´Ð°Ñ Ð´Ð¾Ð´Ð°ÑÐºÐ¾Ð²Ñ Ð½Ð°Ð»Ð°ÑÑÑÐ²Ð°Ð½Ð½Ñ Ð´ÐµÐºÐ¾Ð´ÐµÑа:fatalâ бÑлевий паÑамеÑÑ, ÑкÑо пеÑеданоtrueâ бÑде згенеÑовано виклÑÑÐµÐ½Ð½Ñ Ð´Ð»Ñ ÑимволÑв, ÑÐºÑ Ð½Ðµ вдаÑÑÑÑÑ Ð´ÐµÐºÐ¾Ð´ÑваÑи, в ÑнÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ (Ñипово) вони бÑдÑÑÑ Ð·Ð°Ð¼ÑÐ½ÐµÐ½Ñ Ð½Ð° Ñимвол\uFFFD.ignoreBOMâ бÑлевий паÑамеÑÑ, ÑкÑо пеÑеданоtrueâ бÑде пÑоÑгноÑовано BOM (Byte order mark â необовâÑзковий маÑÐºÐµÑ Ð¿Ð¾ÑÑÐ´ÐºÑ Ð±Ð°Ð¹ÑÑв), ÑÑдко ÑÑаплÑÑÑÑÑÑ Ð² нагодÑ.
â¦Ð поÑÑм декодÑваÑи:
let str = decoder.decode([input], [options]);
inputâBufferSourceбÑÑÐµÑ Ð´Ð»Ñ Ð´ÐµÐºÐ¾Ð´ÑваннÑ.optionsâ необовâÑзковий обâÑкÑ:streamâ знаÑеннÑtrue, ÑкÑо поÑÑÑбно декодÑваÑи поÑÑк (stream), ÑодÑ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. ÐаÑамеÑÑdestinationповинен маÑи ÑипUint8Array.
let encoder = new TextEncoder();
let uint8Array = encoder.encode("Hello");
alert(uint8Array); // 72,101,108,108,111
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)