اگر دادهی دودویی ما درواقع یک رشته باشد چه؟ برای نمونه، ما یک فایل با دادهی متنی دریافت میکنیم.
شی رمزگشای متن(TextDecoder) درونی، به یک نفر اجازه میدهد که با توجه به بافر و رمزگذاری داده شده، مقدار را در یک رشتهی واقعی جاوااسکریپت بخواند.
ابتدا ما نیاز به ساخت آن داریم:
let decoder = new TextDecoder([label], [options]);
- شی
label
– رمزگذاری، به طور پیش فرضutf-8
است اماbig5
وwindows-1251
و برخی دیگر از رمزگذارایها نیز پشتیبانی میشوند. - شی
options
– شی اختیاری:- شی
fatal
– از جنس boolean. اگر مقدار آنtrue
باشد، یک استثنا(exception) برای کاراکتر غیرقابل قبول (غیرقابل رمزگشایی) پرتاب میشود. در غیر این صورت (که حالت پیشفرض میباشد)، آنها را با کاراکتر\uFFFD
جایگذاری میکند. - شی
ignoreBOM
– از جنس boolean. اگر مقدار آنtrue
باشد، BOM(یک علامت unicode اختیاری مرتب شده برحسب بایت) که به ندرت به آن نیاز پیدا میشود را نادیده میگیرد.
- شی
…و سپس رمزگشایی کنید:
let str = decoder.decode([input], [options]);
- شی
input
– برای رمزگشایی (BufferSource
)منبع - شی
options
– شی اختیاری:- شی
stream
– برای رمزگشایی streamها، هنگامی که رمزگشا برای مقادیر قابل توجه دادهها مکررا فراخوانی میشود، درست است. در این مورد، ممکن است یک کاراکتر چند بایتی، برخی مواقع بین بخشهایی از دادهها تقسیم شود. این امکان به رمزگشای متن میگوید که کاراکترهای “ناتمام” را به خاطر داشته باشد و هنگامی که بخش بعدی داده وارد شد، آنها را رمزگشایی کند.
- شی
برای نمونه:
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) ); // 你好
ما میتوانیم بخشی از یک بافر را با ساخت یک view زیرآرایه برای آن، رمزگشایی کنیم:
let uint8Array = new Uint8Array([0, 72, 101, 108, 108, 111, 0]);
// رشته در وسط میباشد
// جدید روی آن، بدون کپی کردن چیزی view ساخت یک
let binaryString = uint8Array.subarray(1, -1);
alert( new TextDecoder().decode(binaryString) ); // Hello
رمزگذار متن
شی رمزگذار متن(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