Моджибаке (文字化け, произнася се /моджибаке/) е термин за неправилните, нечетливи или „счупени“ символи, които се появяват, когато компютърният софтуер не може да интерпретира байтовете на даден текст с правилната кодировка. При съхранение и пренос на текст всяка буква или знак се представя като последователност байтове според избраната кодировка (charset). Ако при показване на текста тези байтове бъдат декодирани с друга кодировка, ще се получат грешни символи — това е моджибаке.
Как възниква моджибаке
- Несъответствие на кодировките: текст е записан в една кодировка (напр. UTF-8, ISO-8859-1, Windows-1251, Shift_JIS), а се интерпретира с друга. Пример: UTF-8 байтове, прочетени като Windows-1252, водят до „Ã©“ вместо „é“.
- Липса на указание за кодировка: при пренос по HTTP, в имейл или в файл няма ясно посочен charset, затова приемникът може да използва грешна по подразбиране кодировка.
- Промяна на софтуера или средата: прехвърляне на файл между операционни системи, редактори или бази данни, които използват различни подразбиращи се кодировки.
- Byte Order Mark (BOM) и UTF-16/UTF-32: BOM може да се тълкува неправилно от някои програми; UTF-16/32 използват 2/4 байта за кодиране и изискват съвместимост при четене.
Кратко за кодировките и Уникод
Преди широкото въвеждане на Уникод са се използвали множество регионални и езикови кодировки (примерно ISO-8859 серии, Windows-125x, Shift_JIS и др.). Някои кодировки са почти идентични за латинския набор, но имат различни „блокове“ със специални символи за други езици, което води до несъвместимост. Уникод дефинира универсален набор от кодови точки за почти всички писмени системи. Съвременните реализации обикновено използват UTF-8 (1 до 4 байта на символ), UTF-16 (обикновено 2 байта, понякога 4) или UTF-32 (4 байта). UTF-8 е най-разпространеният формат за уеб и повечето приложения, защото е обратно съвместим с ASCII и ефективен за латиница и много други скриптове.
Често срещани примери
- „é“ записано в UTF-8 и прочетено като Windows-1252 → „é“
- Японски текст, записан в Shift_JIS, прочетен като UTF-8 → поредица от непознати символи (т.нар. mojibake)
- Файлове с UTF-16 без правилен BOM се показват като „кракозябри“ при интерпретация като UTF-8
Как да откриете и поправите моджибаке
- Проверете указанията за кодировка: в уеб страници — HTTP заглавка Content-Type и/или HTML мета тага (напр. <meta charset="utf-8">). В имейли — Content-Type header с charset.
- Променете кодировката в браузъра или текстовия редактор (View → Encoding), за да тествате различни варианти и да намерите правилната.
- Използвайте инструменти за детекция/конверсия: chardet/uchardet, enca, iconv, python-библиотеки (chardet, charset-normalizer) за откриване и трансформация на кодировката.
- При файлове: отворете в редактор, който поддържа избор на кодировка, и презапишете във UTF-8 след проверка.
- При бази данни: уверете се, че таблиците, колоните и връзката към базата (client charset) използват една и съща кодировка (например utf8mb4 за MySQL).
Превантивни мерки и добри практики
- Използвайте UTF-8 навсякъде — за файлове, уеб страници, бази данни и комуникации.
- Ясно задавайте и предавайте кодировката: HTTP заглавки, meta charset, Content-Type в имейли и API отговори.
- Нормализирайте входните данни и валидирайте, преди да ги запишете или покажете.
- Бъдете внимателни с BOM: за UTF-8 BOM не е необходим и понякога причинява проблеми; за UTF-16/32 BOM помага за детекция на byte order.
Заключение
Моджибаке е следствие от несъвпадение между начина, по който байтовете са кодирани и начина, по който се декодират. На практика проблемът е решим чрез последователно използване на Уникод (предимно UTF-8), коректни заглавки/мета тагове и инструменти за откриване и конвертиране на кодировки. Ако срещнете нечетливи символи, първо проверете посочената кодировка и опитайте да заредите съдържанието с различни кодировки, а при необходимост — конвертирайте към UTF-8.


