موجیباکه (Mojibake) چیست؟

موجیباکه یا Mojibake متنی است که حروفش به نشانه‌های بی‌معنی تبدیل شده‌اند، مثل ط³ظ„ط§ظ… یا سلام به جای سلام. در فارسی معمولاً به آن «حروف به‌هم‌ریخته» یا «کاراکترهای نامفهوم» می‌گویند. این اتفاق وقتی می‌افتد که متن با یک کدگذاری ذخیره و با کدگذاری دیگری خوانده شود، و در بیشتر موارد کاملاً قابل اصلاح است. یک متن خراب را پایین بچسبانید و امتحان کنید.

با متن و این فایل‌ها کار می‌کند:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

مثل خروجی اکسل، نسخه پشتیبان پایگاه داده، زیرنویس و کد وب‌سایت.

اصلاح

  1. فایل را بکشید یا متن را بچسبانید
  2. اصلاح خودکار انجام می‌شود
  3. نتیجه را کپی یا دانلود کنید
یا فایل را اینجا بکشید
  • بدون آپلود. فایل‌ها مستقیم داخل مرورگر شما اصلاح می‌شوند و هرگز از دستگاهتان خارج نمی‌شوند.

  • سرور در اتحادیه اروپا. Mojibuster روی سروری در فنلاند (اتحادیه اروپا) اجرا می‌شود؛ بنابراین مقررات عمومی حفاظت از داده‌ها (GDPR) برقرار است. متن مقررات (EUR-Lex، به انگلیسی)

واژه Mojibake از کجا آمده است؟

Mojibake (文字化け) واژه‌ای ژاپنی است: «moji» یعنی «حرف» و «bake» یعنی «تغییر شکل». در دهه 1990 رایانه‌های ژاپنی هم‌زمان از چند کدگذاری مثل Shift_JIS، EUC-JP و ISO-2022-JP استفاده می‌کردند و ایمیل‌ها و صفحه‌های خراب منظره‌ای روزمره بود. این واژه از آنجا به انگلیسی رفت و به اصطلاحی جهانی تبدیل شد.

حروف چطور به‌هم می‌ریزند؟

رایانه متن را به شکل بایت ذخیره می‌کند و کدگذاری تعیین می‌کند هر بایت با کدام حرف متناظر است. در UTF-8 حرف س در دو بایت ذخیره می‌شود: D8 B3. برنامه‌ای که این دو بایت را با Windows-1256 بخواند، برای هر بایت یک حرف جدا نشان می‌دهد: ط برای D8 و ³ برای B3.

در این مرحله چیزی از دست نمی‌رود؛ بایت‌ها هنوز وجود دارند و فقط اشتباه خوانده شده‌اند. به همین دلیل معمولاً می‌توان موجیباکه را برگرداند: Mojibuster نشانه‌های اشتباه را دوباره به بایت تبدیل می‌کند و آن‌ها را با کدگذاری درست می‌خواند.

متن UTF-8 که با Windows-1256 خوانده شده است

حروف عجیب

ط³ظ„ط§ظ…طŒ ط¬ظ„ط³ظ‡ ط±ظˆط² ظ¾ظ†ط¬ط´ظ†ط¨ظ‡ ط³ط§ط¹طھ 10 ط¯ط± ط¯ظپطھط± طھظ‡ط±ط§ظ† ط¨ط±ع¯ط²ط§ط± ظ…غŒâ€Œط´ظˆط¯.

پس از اصلاح

سلام، جلسه روز پنجشنبه ساعت 10 در دفتر تهران برگزار می‌شود.

شکل‌های موجیباکه در متن فارسی

  • ط³ظ„ط§ظ…: متن UTF-8 که با Windows-1256 خوانده شده است؛ رایج‌ترین شکل، مثلاً در اکسل با تنظیمات فارسی: حروف عجیب در اکسل.
  • سلام: متن UTF-8 که با یک کدگذاری غربی مثل Windows-1252 خوانده شده است.
  • ÓáÇã: فایل قدیمی Windows-1256 که با تنظیمات غربی باز شده است: تبدیل Windows-1256 به UTF-8.
  • در زیرنویس‌های SRT همه این شکل‌ها دیده می‌شوند: زیرنویس فارسی به‌هم‌ریخته.

موجیباکه در زبان‌های دیگر

  • عربی: ظ…ط±ط­ط¨ط§ به جای مرحبا؛ همان خطای Windows-1256. بیشتر در صفحه عربی.
  • ژاپنی: 縺薙s縺ォ縺。縺ッ به جای こんにちは، یعنی متن UTF-8 که با Shift_JIS خوانده شده است.
  • روسی: Привет به جای Привет، یعنی متن UTF-8 که با Windows-1251 خوانده شده است. روس‌ها به آن «کراکوزیابری» می‌گویند.
  • زبان‌های غربی: é، ñ یا € به جای é، ñ یا €؛ رایج‌ترین شکل در جهان.

علت‌های رایج

  • اکسل فایل CSV با UTF-8 بدون BOM را با Windows-1256 باز می‌کند.
  • اتصال به پایگاه داده از latin1 استفاده می‌کند، در حالی که داده‌ها UTF-8 هستند.
  • یک وب‌سایت یا ایمیل charset اشتباهی اعلام می‌کند.
  • فایل‌های قدیمی Windows-1256 در برنامه‌ای باز می‌شوند که UTF-8 انتظار دارد.
  • متنی که از قبل خراب بوده دوباره تبدیل می‌شود و موجیباکه دولایه پدید می‌آید.

آیا موجیباکه همیشه قابل اصلاح است؟

در بیشتر موارد بله، تا وقتی بایت‌ها سالم باشند. اگر برنامه‌ای حروف را با ? یا نویسه جایگزین � عوض کرده باشد، اصلاح ممکن نیست، چون اطلاعات اصلی از بین رفته است. Mojibuster هر چه قابل اصلاح باشد اصلاح می‌کند و تعداد جاهای از دست رفته را می‌گوید.

چطور از موجیباکه پیشگیری کنیم؟

  • فایل‌ها را با UTF-8 ذخیره کنید و فایل‌های CSV مخصوص اکسل را با قالب CSV UTF-8 (Comma delimited).
  • کدگذاری را صریح تعیین کنید: <meta charset="utf-8"> در HTML و utf8mb4 در MySQL و MariaDB.
  • متن را فقط یک بار، در مرز بین دو سیستم، تبدیل کنید.
  • هنگام وارد کردن فایل، کدگذاری را خودتان انتخاب کنید و حدس زدن را به برنامه نسپارید.

پرسش‌های متداول

آیا فایل خراب است یا ویروس دارد؟

خیر. موجیباکه مشکل نمایش است، نه ویروس، و معمولاً به معنی از دست رفتن داده نیست. فایل فقط با کدگذاری اشتباه خوانده شده است.

تفاوت موجیباکه با نشانه � چیست؟

موجیباکه مثل ط³ظ„ط§ظ… هنوز بایت‌های اصلی را دارد و قابل اصلاح است. نشانه � یعنی برنامه‌ای نتوانسته بایتی را بخواند و آن را جایگزین کرده است؛ آن حرف از دست رفته است.

چرا به جای متن فارسی علامت سؤال دیده می‌شود؟

یعنی برنامه متن را با کدگذاری‌ای ذخیره کرده که حروف فارسی ندارد و آن‌ها را با ? جایگزین کرده است. در این حالت حروف از دست رفته‌اند؛ فایل را دوباره از منبع با UTF-8 خروجی بگیرید.

چرا «ی» در جستجو پیدا نمی‌شود؟

احتمالاً متن «ي» عربی دارد، نه «ی» فارسی؛ دو نویسه متفاوت که شبیه هم‌اند. این موجیباکه نیست، اما در فایل‌های قدیمی Windows-1256 رایج است. Mojibuster هنگام خواندن این فایل‌ها «ی» و «ک» فارسی را برمی‌گرداند: تبدیل Windows-1256 به UTF-8.

آیا متن روی سرور آپلود می‌شود؟

خیر. Mojibuster متن را داخل مرورگر شما اصلاح می‌کند و آن را به جایی منتقل یا ذخیره نمی‌کند.

راهنماهای دیگر