مقدمه
رشتهها در جاوااسکریپت برای نمایش متن به کار میروند، اما در دنیای کامپیوتر، متن در نهایت به
صورت دنبالهای از بایتهای باینری ذخیره و منتقل میشود. Encoding API یک رابط برنامهنویسی
استاندارد برای تبدیل بین رشتههای متنی و دادههای باینری (به طور خاص، آرایههای Uint8Array)
فراهم میکند. این API زمانی حیاتی است که نیاز به کار با فایلها، درخواستهای شبکه، یا
الگوریتمهای رمزنگاری داریم که با دادههای خام باینری سروکار دارند.
این API بر اساس مفهوم «انکودینگ کاراکتر» کار میکند که معروفترین و پراستفادهترین آن در وب،
UTF-8 است. Encoding API شامل دو رابط اصلی است: TextEncoder برای تبدیل رشته به
بایت، و TextDecoder برای تبدیل بایت به رشته.
رمزگذاری رشتهها با TextEncoder
یک نمونه (instance) از TextEncoder همیشه رشتهها را به فرمت UTF-8 انکود میکند. فرآیند کار با آن بسیار
ساده است: ابتدا یک نمونه از آن را با new TextEncoder() میسازیم و سپس متد encode() آن را برای تبدیل رشته به یک آرایه از بایتها (Uint8Array)
فراخوانی میکنیم.
JAVASCRIPT
const encoder = new TextEncoder();
const greeting = 'سلام دنیا! 👋';
const utf8Bytes = encoder.encode(greeting);
console.log(utf8Bytes);
console.log(`The string "${greeting}" is ${utf8Bytes.length} bytes long in UTF-8.`);
در کد بالا، ما یک رشته حاوی کاراکترهای فارسی و یک اموجی را به متد encode() میدهیم. خروجی یک Uint8Array است که نمایش باینری آن رشته
در انکودینگ UTF-8 است. همانطور که میبینید، کاراکترهای غیر-ASCII مانند حروف فارسی یا اموجیها،
بیش از یک بایت فضا اشغال میکنند.
رمزگشایی بایتها با TextDecoder
TextDecoder عمل معکوس را انجام میدهد: یک دنباله از بایتها (مانند یک Uint8Array) را گرفته و
آن را به یک رشته جاوااسکریپت قابل خواندن تبدیل میکند. هنگام ساخت یک نمونه از TextDecoder،
میتوانیم انکودینگ مورد نظر را مشخص کنیم، اما اگر این کار را نکنیم، به طور پیشفرض از UTF-8
استفاده خواهد کرد که در اکثر مواقع همان چیزی است که نیاز داریم.
JAVASCRIPT
const decoder = new TextDecoder();
const decodedString = decoder.decode(utf8Bytes);
console.log(decodedString);
این کد به سادگی آرایه بایتی که در مرحله قبل ایجاد کردیم را به متد decode() میدهد و رشته اصلی را دوباره به دست میآورد. این فرآیند
برای خواندن دادههای باینری از فایلها یا پاسخهای شبکه بسیار حیاتی است.
یک مثال کاربردی
گرچه بسیاری از APIهای مدرن وب (مانند Fetch API) میتوانند به صورت خودکار تبدیل رشته و داده
باینری را مدیریت کنند، اما Encoding API ابزار پایهای این عملیات است و زمانی که به کنترل
مستقیم بر روی دادههای باینری نیاز داریم، به کار میآید. برای مثال، فرض کنید میخواهیم متنی را
برای ذخیره در یک فایل آماده کنیم.
JAVASCRIPT
async function prepareTextForSaving(text) {
const encoder = new TextEncoder();
const data = encoder.encode(text);
console.log('Binary data is ready to be written to a file.');
return data;
}
prepareTextForSaving('This is my file content.');
این تابع یک رشته را گرفته و آن را به فرمت باینری Uint8Array تبدیل میکند. این خروجی باینری،
فرمت استاندارد مورد نیاز برای بسیاری از APIهایی است که با فایلها یا جریانهای داده (streams)
کار میکنند.
در این درس با Encoding API و دو جزء اصلی آن یعنی TextEncoder و TextDecoder
آشنا شدیم و دیدیم که چگونه این ابزارها به عنوان پل ارتباطی بین دنیای متنی جاوااسکریپت و دنیای
باینری فایلها و شبکهها عمل میکنند. این یک مهارت بنیادی برای کار با دادههای سطح پایین است. در
درس بعدی، این مفهوم را با بررسی `APIهای Blob و File` گسترش خواهیم داد و یاد میگیریم که چگونه با
اشیاء دادهی بزرگ و فایلها در جاوااسکریپت کار کنیم.