اگر دادهی دودویی ما درواقع یک رشته باشد چه؟ برای نمونه، ما یک فایل با دادهی متنی دریافت میکنیم.
شی رمزگشای متن(TextDecoder) درونی، به یک نفر اجازه میدهد که با توجه به بافر و رمزگذاری داده شده، مقدار را در یک رشتهی واقعی جاوااسکریپت بخواند.
ابتدا ما نیاز به ساخت آن داریم:
letdecoder=newTextDecoder([label],[options]);- شی
label-- رمزگذاری، به طور پیش فرضutf-8است اماbig5وwindows-1251و برخی دیگر از رمزگذارایها نیز پشتیبانی میشوند. - شی
options-- شی اختیاری:- شی
fatal-- از جنس boolean. اگر مقدار آنtrueباشد، یک استثنا(exception) برای کاراکتر غیرقابل قبول (غیرقابل رمزگشایی) پرتاب میشود. در غیر این صورت (که حالت پیشفرض میباشد)، آنها را با کاراکتر\uFFFDجایگذاری میکند. - شی
ignoreBOM-- از جنس boolean. اگر مقدار آنtrueباشد، BOM(یک علامت unicode اختیاری مرتب شده برحسب بایت) که به ندرت به آن نیاز پیدا میشود را نادیده میگیرد.
- شی
...و سپس رمزگشایی کنید:
letstr=decoder.decode([input],[options]);- شی
input-- برای رمزگشایی (BufferSource)منبع - شی
options-- شی اختیاری:- شی
stream-- برای رمزگشایی streamها، هنگامی که رمزگشا برای مقادیر قابل توجه دادهها مکررا فراخوانی میشود، درست است. در این مورد، ممکن است یک کاراکتر چند بایتی، برخی مواقع بین بخشهایی از دادهها تقسیم شود. این امکان به رمزگشای متن میگوید که کاراکترهای "ناتمام" را به خاطر داشته باشد و هنگامی که بخش بعدی داده وارد شد، آنها را رمزگشایی کند.
- شی
برای نمونه:
letuint8Array=newUint8Array([72,101,108,108,111]);alert(newTextDecoder().decode(uint8Array));// Helloletuint8Array=newUint8Array([228,189,160,229,165,189]);alert(newTextDecoder().decode(uint8Array));// 你好ما میتوانیم بخشی از یک بافر را با ساخت یک view زیرآرایه برای آن، رمزگشایی کنیم:
letuint8Array=newUint8Array([0,72,101,108,108,111,0]);// رشته در وسط میباشد// جدید روی آن، بدون کپی کردن چیزی view ساخت یکletbinaryString=uint8Array.subarray(1,-1);alert(newTextDecoder().decode(binaryString));// Helloشی رمزگذار متن(TextEncoder) برعکس کار را انجام میدهد -- یک رشته را به بایتها تبدیل میکند.
سینتکس آن به صورت زیر است:
letencoder=newTextEncoder();تنها رمزگذاریای که رمزگذار متن از آن پشتیبانی میکند "utf-8" میباشد.
رمزگذار متن دو متد دارد:
- متد
encode(str)-- از یک رشته،Uint8Arrayرا برمیگرداند. - متد
encodeInto(str, destination)-- رشتهیstrرا درونdestinationکه بایدUint8Arrayباشد، رمزگذاری میکند.
letencoder=newTextEncoder();letuint8Array=encoder.encode("Hello");alert(uint8Array);// 72,101,108,108,111