ماژول 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 کردن داده‌ها را ایمن و قابل اعتماد می‌سازد.


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

مقالات مرتبط

آشنایی کامل با ماژول Cluster در Node.js و نحوه افزایش مقیاس‌پذیری سرور

ماژول Cluster در Node.js به توسعه‌دهندگان اجازه می‌دهد چندین پردازش همزمان ایجاد کنند که یک پورت سرور را به اشتراک می‌گذارند. این کار باعث استفاده بهتر از هسته‌های CPU و افزایش توان پردازش برنامه می‌شود. در این مقاله نحوه کار Cluster، مدیریت Workerها، تنظیمات مهم و مثال عملی را بررسی می‌کنیم.

ادامه

راهنمای جامع ماژول VM در Node.js (ماژول node:vm)

ماژول node:vm امکان کامپایل و اجرای کد جاوااسکریپت در کانتکست‌های ایزولهٔ V8 را فراهم می‌کند. این کانتکست‌ها مانند یک «سندباکس سبک» داخل برنامهٔ Node.js عمل می‌کنند و هرکدام globalThis مخصوص خود را دارند. این ماژول برای اجرای پویا، موتورهای قالب (Template Engines)، سیستم‌های افزونه (Plugin Systems)، REPLها و تست ایزولهٔ منطق بسیار مناسب است. اما نکتهٔ بسیار مهم: vm یک ابزار امنیتی نیست و نباید برای اجرای کدهای غیرقابل‌اعتماد استفاده شود.

ادامه

راهنمای جامع ماژول V8 در Node.js (ماژول node:v8)

راهنمای جامع ماژول V8 در Node.js (ماژول node:v8)

ادامه

راهنمای جامع Worker Threads در Node.js (ماژول node:worker_threads)

ماژول node:worker_threads امکان اجرای واقعی چندریسمانی (Multithreading) را در Node.js فراهم می‌کند. برخلاف مدل تک‌ریسمانی سنتی Node.js، Worker Threads اجازه می‌دهند کارهای سنگین CPU در ریسه‌های جداگانه اجرا شوند بدون اینکه حلقهٔ رویداد (Event Loop) مسدود شود. این ماژول از حافظهٔ اشتراکی، انتقال بدون کپی (Zero‑Copy)، کانال‌های پیام، Worker Pool، محدودیت منابع و ابزارهای همگام‌سازی پیشرفته پشتیبانی می‌کند. Worker Threads برای پردازش‌های محاسباتی سنگین ایده‌آل هستند، در حالی که I/O همچنان باید توسط ریسهٔ اصلی مدیریت شود.

ادامه

راهنمای جامع ماژول util در Node.js

ماژول node:util مجموعه‌ای از توابع کمکی قدرتمند برای استفاده در هستهٔ Node.js و همچنین توسعهٔ برنامه‌ها ارائه می‌دهد. این ماژول ابزارهایی برای دیباگ، بازرسی اشیا، تبدیل Callback ↔ Promise، قالب‌بندی رشته‌ها، بررسی انواع، مدیریت خطاها، رمزگذاری متن، پردازش MIME، پارس آرگومان‌های CLI، سیگنال‌های Abort، و ابزارهای متفرقه فراهم می‌کند. این ماژول یکی از جعبه‌ابزارهای اصلی و ضروری برای توسعه‌دهندگان Node.js است.

ادامه

راهنمای جامع ماژول URL در Node.js

ماژول node:url ابزارهایی برای تحلیل، ساخت، و دست‌کاری URLها در Node.js فراهم می‌کند. Node.js دو API برای کار با URL دارد: WHATWG URL API — استاندارد مدرن و سازگار با مرورگرها (توصیه‌شده). Legacy API — API قدیمی Node.js (غیرتوصیه‌شده). WHATWG URL API یک رابط تمیز، سازگار و قدرتمند برای کار با اجزای URL، پارامترهای query، الگوهای URL و حتی Blob URLها ارائه می‌دهد.

ادامه