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-1251
va ko’p boshqalar ham qo’llab-quvvatlanadi.options
– ixtiyoriy obyekt:fatal
– boolean, agartrue
bo’lsa, yaroqsiz (decode qilib bo’lmaydigan) belgilar uchun istisno tashlaydi, aks holda (standart) ularni\uFFFD
belgisi bilan almashtiradi.ignoreBOM
– boolean, agartrue
bo’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,decoder
kiruvchi ma’lumot bo’laklari bilan takroran chaqirilganda. Bu holda ko’p baytli belgi ba’zan bo’laklar orasida bo’linishi mumkin. Bu parametrTextDecoder
ga “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 danUint8Array
qaytaradi.encodeInto(str, destination)
–str
niUint8Array
bo’lishi kerak bo’lgandestination
ga 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…)