ماژول StringDecoder در Node.js

ماژول node:string_decoder در Node.js ابزاری برای تبدیل امن و دقیق داده‌های باینری (Buffer) به رشته‌هاست، به‌ویژه زمانی که داده شامل کاراکترهای چندبایتی UTF‑8 یا UTF‑16 باشد. برخلاف buffer.toString() که ممکن است کاراکترهای ناقص را خراب کند، StringDecoder با نگه‌داشتن بایت‌های ناقص در یک بافر داخلی، از تولید خروجی‌های اشتباه جلوگیری می‌کند.

UTF‑8 / UTF‑16 multibyteBuffer decodingIncomplete characters handlingstringDecoder.write()stringDecoder.end()

~2 دقیقه مطالعه • بروزرسانی ۹ دی ۱۴۰۴

1. معرفی


ماژول node:string_decoder برای تبدیل Buffer به رشته استفاده می‌شود، بدون اینکه کاراکترهای چندبایتی ناقص باعث ایجاد خروجی خراب شوند. این ماژول برای پردازش جریان‌های داده (Streams) بسیار کاربردی است.


2. نحوهٔ دسترسی


const { StringDecoder } = require('node:string_decoder');

3. مثال ساده


در این مثال، دو کاراکتر چندبایتی (¢ و €) به‌درستی decode می‌شوند:


const decoder = new StringDecoder('utf8');

console.log(decoder.write(Buffer.from([0xC2, 0xA2]))); // ¢
console.log(decoder.write(Buffer.from([0xE2, 0x82, 0xAC]))); // €

4. مدیریت کاراکترهای ناقص


اگر بایت‌های یک کاراکتر چندبایتی به‌صورت جداگانه دریافت شوند، StringDecoder آن‌ها را نگه می‌دارد تا کامل شوند:


decoder.write(Buffer.from([0xE2]));
decoder.write(Buffer.from([0x82]));
console.log(decoder.end(Buffer.from([0xAC]))); // €

5. کلاس StringDecoder


5.1. سازنده


  • new StringDecoder(encoding): ساخت نمونهٔ جدید.
  • پیش‌فرض: 'utf8'.

5.2. متد write()


  • ورودی: Buffer یا TypedArray.
  • خروجی: رشتهٔ decode شده.
  • کاراکترهای ناقص را نگه می‌دارد تا کامل شوند.

5.3. متد end()


  • باقی‌ماندهٔ بافر داخلی را decode می‌کند.
  • اگر بایت ناقص وجود داشته باشد، با کاراکتر جایگزین (replacement) پر می‌شود.
  • پس از آن می‌توان decoder را دوباره استفاده کرد.

6. چرا از StringDecoder استفاده کنیم؟


  • جلوگیری از خراب شدن کاراکترهای چندبایتی در جریان‌های داده.
  • سازگاری با UTF‑8 و UTF‑16.
  • مناسب برای Streamها که داده را chunk‑به‑chunk دریافت می‌کنند.
  • رفتار قابل پیش‌بینی در برابر بایت‌های ناقص.

7. کاربردهای رایج


  • خواندن داده از TCP sockets.
  • پردازش chunkهای HTTP request/response.
  • خواندن فایل‌های متنی با Stream.
  • Decode کردن داده‌هایی که ممکن است ناقص دریافت شوند.

نتیجه‌گیری


ماژول StringDecoder ابزاری ضروری برای کار با داده‌های متنی در محیط‌های جریان‌محور است. با مدیریت هوشمندانهٔ کاراکترهای چندبایتی، از ایجاد خروجی‌های خراب جلوگیری می‌کند و decode کردن داده‌ها را ایمن و قابل اعتماد می‌سازد.


نوشته و پژوهش شده توسط دکتر شاهین صیامی