Agar binary ma’lumot aslida string bo’lsa nima bo’ladi? Masalan, biz matnli ma’lumotlarga ega faylni oldik.
O’rnatilgan TextDecoder obyekti buffer va kodlashni hisobga olgan holda qiymatni haqiqiy JavaScript string ga o’qish imkonini beradi.
Avval uni yaratishimiz kerak:
let decoder = new TextDecoder([label], [options]);
label– kodlash, standart bo’yichautf-8, lekinbig5,windows-1251va ko’p boshqalar ham qo’llab-quvvatlanadi.options– ixtiyoriy obyekt:fatal– boolean, agartruebo’lsa, yaroqsiz (decode qilib bo’lmaydigan) belgilar uchun istisno tashlaydi, aks holda (standart) ularni\uFFFDbelgisi bilan almashtiradi.ignoreBOM– boolean, agartruebo’lsa, BOM ni (ixtiyoriy bayt-tartib Unicode belgisi) e’tiborsiz qoldiradi, kamdan-kam kerak bo’ladi.
…Va keyin decode qilish:
let str = decoder.decode([input], [options]);
input– decode qilinadiganBufferSource.options– ixtiyoriy obyekt:stream– oqimlarni decode qilish uchun true,decoderkiruvchi ma’lumot bo’laklari bilan takroran chaqirilganda. Bu holda ko’p baytli belgi ba’zan bo’laklar orasida bo’linishi mumkin. Bu parametrTextDecoderga “tugallanmagan” belgilarni eslab qolish va keyingi bo’lak kelganda ularni decode qilish haqida aytadi.
Masalan:
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) ); // 你好
Buffer ning bir qismini uning uchun subarray view yaratish orqali decode qilishimiz mumkin:
let uint8Array = new Uint8Array([0, 72, 101, 108, 108, 111, 0]);
// string o'rtada
// hech narsani nusxalamasdan uning ustida yangi view yaratish
let binaryString = uint8Array.subarray(1, -1);
alert( new TextDecoder().decode(binaryString) ); // Hello
TextEncoder
TextEncoder teskari ishni bajaradi – string ni baytlarga aylantiradi.
Sintaksis:
let encoder = new TextEncoder();
U qo’llab-quvvatlaydigan yagona kodlash “utf-8”.
Uning ikkita usuli bor:
encode(str)– string danUint8Arrayqaytaradi.encodeInto(str, destination)–strniUint8Arraybo’lishi kerak bo’lgandestinationga kodlaydi.
let encoder = new TextEncoder();
let uint8Array = encoder.encode("Hello");
alert(uint8Array); // 72,101,108,108,111
Izohlar
<code>yorlig'ini ishlating, bir nechta satrlar uchun - ularni<pre>yorlig'i bilan o'rab qo'ying, 10 satrdan ortiq bo'lsa - sandbox (plnkr, jsbin, codepen…)