Откуда взялись слова
«Кракозябры» – шутливое русское название нечитаемых символов. В английском и большинстве других языков говорят mojibake (文字化け): по-японски «moji» – «символ», «bake» – «превращение». В 1990-х японские компьютеры одновременно использовали Shift_JIS, EUC-JP и ISO-2022-JP, и испорченные письма были обычным делом. В России история похожая: Windows-1251, KOI8-R и досовская CP866 долго жили параллельно.
Как возникают кракозябры
Компьютер хранит текст в виде байтов. Кодировка определяет, какой байт какой букве соответствует. В UTF-8 буква П занимает два байта: D0 9F. Программа, которая читает их как Windows-1251, показывает по символу на каждый байт: Р вместо D0 и џ вместо 9F.
На этом шаге ничего не теряется – байты на месте, их просто прочитали неправильно. Поэтому кракозябры обычно можно вернуть в нормальный вид: Mojibuster превращает неверные символы обратно в байты и читает их в правильной кодировке.
Кракозябры
Привет! Встреча в пятницу в 15:00, кабинет 204.
После исправления
Привет! Встреча в пятницу в 15:00, кабинет 204.
Какие бывают кракозябры
Привет– UTF-8, прочитанный как Windows-1251. Самый частый случай, например в Excel: кракозябры в Excel.Ïðèâåò– текст в Windows-1251, показанный в западноевропейской кодировке. Подробнее: Windows-1251 в UTF-8.рТЙЧЕФ– текст в KOI8-R, прочитанный как 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-R открывают в программе, которая ждёт UTF-8.
- Уже испорченный текст перекодируют ещё раз – получаются двойные кракозябры.
Можно ли исправить кракозябры всегда?
Почти всегда, пока байты целы. Исправить уже нельзя, если программа заменила буквы на ? или на символ замены � – исходная информация тогда потеряна. Mojibuster исправляет всё, что можно исправить, и сообщает, сколько мест потеряно.
Как избежать кракозябр
- Сохраняйте файлы в UTF-8, CSV для Excel – в формате CSV UTF-8 (разделитель – запятая).
- Указывайте кодировку:
<meta charset="utf-8">в HTML,utf8mb4в MySQL и MariaDB. - Перекодируйте текст только один раз, на границе между двумя системами.
- При импорте выбирайте кодировку сами, а не полагайтесь на догадку программы.
Частые вопросы
Почему кракозябры называют mojibake?
Это японское слово (文字化け, «превращение символов»). В Японии с этой проблемой сталкивались так часто, что слово перешло в английский и стало международным термином.
Файл повреждён или это вирус?
Нет. Кракозябры – это проблема отображения, а не вирус, и обычно данные не потеряны. Файл просто прочитан в неправильной кодировке.
Чем кракозябры отличаются от символа �?
Кракозябры вроде Привет ещё содержат исходные байты и исправляются. Символ � означает, что программа не смогла прочитать байт и заменила его, – эта буква потеряна.
Текст загружается на сервер?
Нет. Mojibuster исправляет текст прямо в браузере. Он никуда не передаётся и нигде не сохраняется.