Звідки взялися слова
«Кракозябри» – жартівлива назва нечитабельних символів, яку вживають і в Україні; кажуть також «ієрогліфи замість букв» або «незрозумілі символи». В англійській та більшості інших мов говорять mojibake (文字化け): японською «moji» – «символ», «bake» – «перетворення». У 1990-х японські комп’ютери водночас використовували Shift_JIS, EUC-JP та ISO-2022-JP, і зіпсовані листи були звичною справою. У кирилиці історія схожа: Windows-1251, KOI8-U та досові кодування довго існували паралельно.
Як виникають кракозябри
Комп’ютер зберігає текст у вигляді байтів. Кодування визначає, якій букві відповідає який байт. В UTF-8 буква П займає два байти: D0 9F. Програма, яка читає їх як Windows-1251, показує по символу на кожен байт: Р замість D0 і џ замість 9F. Українська і (D1 96) стає С–.
На цьому кроці нічого не губиться – байти на місці, їх просто прочитали неправильно. Тому кракозябри зазвичай можна повернути в нормальний вигляд: Mojibuster перетворює неправильні символи назад на байти й читає їх у правильному кодуванні.
Кракозябри
Привіт! Зустріч у п’ятницю о 15:00, кабінет 204. Їдемо до Ґанни в Київ.
Після виправлення
Привіт! Зустріч у п’ятницю о 15:00, кабінет 204. Їдемо до Ґанни в Київ.
Які бувають кракозябри
РџСЂРёРІС–С‚– UTF-8, прочитаний як Windows-1251. Найчастіший випадок, наприклад в Excel: кракозябри в Excel.Ïðèâ³ò– текст у Windows-1251, показаний у західноєвропейському кодуванні. Детальніше: Windows-1251 в UTF-8.рТЙЧ¦Ф– текст у KOI8-U, прочитаний як Windows-1251. Трапляється в старих листах і файлах з Unix-серверів.????– букви вже замінено знаками питання. Їх, на жаль, не відновити.
Кракозябри в інших мовах
- Японська:
縺薙s縺ォ縺。縺ッзамістьこんにちは– UTF-8, прочитаний як Shift_JIS. Детальніше на японській сторінці. - Китайська:
浣犲ソзамість你好– UTF-8, прочитаний як GBK. Китайською це 乱码 (luànmǎ, «хаотичний код»). - Західні мови:
é,ñабо€замістьé,ñабо€– найпоширеніша форма у світі.
Типові причини
- Excel відкриває CSV в UTF-8 без BOM у кодуванні Windows-1251.
- Підключення до бази даних використовує
cp1251абоlatin1, а дані зберігаються в UTF-8. - Сайт або лист указує неправильний
charset. - Старі файли у Windows-1251 або KOI8-U відкривають у програмі, яка очікує UTF-8.
- Уже зіпсований текст перекодовують ще раз – виходять подвійні кракозябри.
Чи можна виправити кракозябри завжди?
Майже завжди, поки байти цілі. Виправити вже не можна, якщо програма замінила букви на ? або на символ заміни � – вихідну інформацію тоді втрачено. Mojibuster виправляє все, що можна виправити, і повідомляє, скільки місць утрачено.
Як уникнути кракозябр
- Зберігайте файли в UTF-8, CSV для Excel – у форматі CSV UTF-8 (розділювачі – коми).
- Указуйте кодування:
<meta charset="utf-8">в HTML,utf8mb4у MySQL і MariaDB. - Перекодовуйте текст лише один раз, на межі між двома системами.
- Під час імпорту вибирайте кодування самі, а не покладайтеся на здогадку програми.
Часті запитання
Чому кракозябри називають mojibake?
Це японське слово (文字化け, «перетворення символів»). У Японії з цією проблемою стикалися так часто, що слово перейшло в англійську й стало міжнародним терміном.
Файл пошкоджено, чи це вірус?
Ні. Кракозябри – це проблема відображення, а не вірус, і зазвичай дані не втрачено. Файл просто прочитано в неправильному кодуванні.
Чим кракозябри відрізняються від символу �?
Кракозябри на кшталт РџСЂРёРІС–С‚ ще містять вихідні байти й виправляються. Символ � означає, що програма не змогла прочитати байт і замінила його, – цю букву втрачено.
Текст надсилається на сервер?
Ні. Mojibuster виправляє текст прямо в браузері. Він нікуди не передається і ніде не зберігається.