واژه Mojibake از کجا آمده است؟
Mojibake (文字化け) واژهای ژاپنی است: «moji» یعنی «حرف» و «bake» یعنی «تغییر شکل». در دهه 1990 رایانههای ژاپنی همزمان از چند کدگذاری مثل Shift_JIS، EUC-JP و ISO-2022-JP استفاده میکردند و ایمیلها و صفحههای خراب منظرهای روزمره بود. این واژه از آنجا به انگلیسی رفت و به اصطلاحی جهانی تبدیل شد.
حروف چطور بههم میریزند؟
رایانه متن را به شکل بایت ذخیره میکند و کدگذاری تعیین میکند هر بایت با کدام حرف متناظر است. در UTF-8 حرف س در دو بایت ذخیره میشود: D8 B3. برنامهای که این دو بایت را با Windows-1256 بخواند، برای هر بایت یک حرف جدا نشان میدهد: ط برای D8 و ³ برای B3.
در این مرحله چیزی از دست نمیرود؛ بایتها هنوز وجود دارند و فقط اشتباه خوانده شدهاند. به همین دلیل معمولاً میتوان موجیباکه را برگرداند: Mojibuster نشانههای اشتباه را دوباره به بایت تبدیل میکند و آنها را با کدگذاری درست میخواند.
حروف عجیب
ط³ظ„ط§ظ…طŒ ط¬ظ„ط³ظ‡ ط±ظˆط² ظ¾ظ†ط¬ط´ظ†ط¨ظ‡ ط³ط§ط¹طھ 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 متن را داخل مرورگر شما اصلاح میکند و آن را به جایی منتقل یا ذخیره نمیکند.