Случай 1: ромбики � в исправном файле
Если редактор, плеер или браузер показывает вместо всех русских букв �, файл обычно сохранён в старой кодировке Windows-1251 (реже KOI8-R или CP866), а программа читает его как UTF-8. Байты русских букв в UTF-8 недопустимы, поэтому программа подставляет � только при показе. В самом файле правильные байты на месте. Подробнее о двух кодировках: Windows-1251 и UTF-8.
Решение: перетащите исходный файл в поле выше. Mojibuster при чтении распознаёт кодировку и сохраняет файл в UTF-8. Важно: используйте сам файл, а не копируйте текст из программы – при копировании � останутся навсегда.
Случай 2: � или ? записаны в сам текст
Если программа сохранила или передала текст уже с �, исходные буквы потеряны. То же с ?: программы вставляют его, когда буквы нет в нужной кодировке. Например, при сохранении в ASCII или при записи в столбец базы данных, где нет кириллицы.
Восстановить такие буквы нельзя: все они превратились в один и тот же символ. Mojibuster не гадает, а сообщает, сколько мест затронуто. Поможет только источник: сделайте выгрузку заново или возьмите резервную копию.
Откуда берутся вопросительные знаки
- База данных: столбец или соединение в
latin1илиascii, а данные приходят в UTF-8. Тогда MySQL заменяет русские буквы на?– см. MySQL и phpMyAdmin. - Старый сайт на PHP: страница в Windows-1251, но кодировка не указана в заголовке или в
<meta charset>. Браузер читает её как UTF-8 и показывает�. Если же соединение с базой открыто без кодировки, вместо букв в базу попадают?. - Блокнот, «Сохранить как» → ANSI: на английской Windows ANSI – это западная кодировка, и русские буквы сохраняются как
?. На русской Windows ANSI – это Windows-1251: русский текст сохранится, а другие символы (например, эмодзи) станут?. - 1С и старые почтовые программы: выгрузки и письма в Windows-1251 или KOI8-R открываются в программах, которые ждут UTF-8, – и вместо текста видны
�. - PowerShell 5.1:
Export-Csvпо умолчанию пишет ASCII и заменяет русские буквы на?– см. PowerShell. - Python:
encode('ascii', errors='replace')молча заменяет буквы на?– см. Python и pandas. - Консоль Windows: она работает в CP866 и показывает незнакомые символы как
?. Обычно испорчен только показ, а не файл.
Как понять, какой у вас случай
- Откройте файл в редакторе, который показывает кодировку, например в Notepad++. Если в строке состояния написано «ANSI» или «Windows-1251», это случай 1.
- Перетащите файл в Mojibuster. Если он прочитан как Windows-1251 и русские буквы вернулись, это был случай 1 – см. Windows-1251 и UTF-8.
- Если Mojibuster сообщает о потерянных символах, это случай 2. Тогда поможет только новая выгрузка.
Если вместо вопросительных знаков видны сочетания вроде Привет, это другая ошибка, и её почти всегда можно исправить: что такое кракозябры.
Частые вопросы
Может ли Mojibuster превратить ? обратно в буквы?
Нет. ? может означать любую букву, информация потеряна. Mojibuster не трогает такие места, но сообщает, сколько их.
Почему в одной программе видны �, а в другой всё нормально?
Значит, файл исправен, и только одна из программ читает его в неправильной кодировке. Сохраните файл в UTF-8 через Mojibuster, и обе программы покажут его правильно.
Что это за символ �?
Символ замены U+FFFD. Программы вставляют его, когда не могут прочитать байт как букву. Он указывает на ошибку кодировки и не относится к самому тексту.