Вопросительные знаки вместо русских букв: что значат ? и �

Вместо русских букв в тексте видны ? или ромбики �? Они похожи, но причины у них разные. Часто сам файл в полном порядке, но иногда буквы уже потеряны. Вот как понять, какой у вас случай.

Работает с текстом и файлами:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

Например, выгрузки из Excel и 1С, дампы баз данных, субтитры или код сайтов.

Исправить

  1. Перетащите файл или вставьте текст
  2. Исправление происходит автоматически
  3. Скопируйте или скачайте
или просто перетащите файл сюда
  • Без загрузки. Файлы исправляются прямо в браузере и не покидают ваше устройство.

  • Серверы в ЕС. Mojibuster работает на сервере в стране Финляндия (ЕС), поэтому действует Общий регламент по защите данных (GDPR). Текст GDPR (EUR-Lex, англ.)

Случай 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 и показывает незнакомые символы как ?. Обычно испорчен только показ, а не файл.

Как понять, какой у вас случай

  1. Откройте файл в редакторе, который показывает кодировку, например в Notepad++. Если в строке состояния написано «ANSI» или «Windows-1251», это случай 1.
  2. Перетащите файл в Mojibuster. Если он прочитан как Windows-1251 и русские буквы вернулись, это был случай 1 – см. Windows-1251 и UTF-8.
  3. Если Mojibuster сообщает о потерянных символах, это случай 2. Тогда поможет только новая выгрузка.

Если вместо вопросительных знаков видны сочетания вроде Привет, это другая ошибка, и её почти всегда можно исправить: что такое кракозябры.

Частые вопросы

Может ли Mojibuster превратить ? обратно в буквы?

Нет. ? может означать любую букву, информация потеряна. Mojibuster не трогает такие места, но сообщает, сколько их.

Почему в одной программе видны �, а в другой всё нормально?

Значит, файл исправен, и только одна из программ читает его в неправильной кодировке. Сохраните файл в UTF-8 через Mojibuster, и обе программы покажут его правильно.

Что это за символ �?

Символ замены U+FFFD. Программы вставляют его, когда не могут прочитать байт как букву. Он указывает на ошибку кодировки и не относится к самому тексту.

Другие инструкции