Знаки питання замість букв: що означають ? і �

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

Працює з текстом і файлами:

  • 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, а програма читає його як UTF-8. Байти українських букв у Windows-1251 не є допустимими для UTF-8, тому програма під час показу підставляє замість них символ �. У самому файлі правильні байти залишилися.

Рішення: перетягніть початковий файл у поле вище. Mojibuster під час читання розпізнає кодування й перетворить файл в UTF-8. Важливо: беріть сам файл, а не копіюйте текст із програми – після копіювання � залишиться назавжди. Детальніше про це кодування: Windows-1251 в UTF-8.

Випадок 2: � або ? записано в сам текст

Якщо програма зберегла чи передала текст уже із символом заміни, початкову букву втрачено. Те саме зі знаком ?: програми ставлять його, коли букви немає в кодуванні, в яке зберігають текст. Наприклад, під час збереження в ASCII або запису кирилиці в стовпець бази даних, який її не підтримує.

Відновити тут нічого не можна: усі букви перетворилися на той самий знак, і слово Привіт стає просто ??????. Mojibuster не вгадує, а показує, скільки місць пошкоджено. Допоможе лише джерело: повторіть вивантаження або візьміть резервну копію.

Типові причини знаків питання

  • База даних MySQL: стовпець або з'єднання має кодування latin1 чи ascii, а дані надходять в UTF-8. Тоді MySQL замінює кирилицю на ? – дивіться MySQL і phpMyAdmin.
  • Сайт на PHP без charset: сторінка не вказує кодування, і браузер читає текст у Windows-1251 як UTF-8. Тоді видно �, хоча дані в базі можуть бути справні.
  • Блокнот, «Зберегти як ANSI»: на Windows із західними регіональними налаштуваннями ANSI – це не Windows-1251, і українські букви стають ?.
  • PowerShell 5.1: Export-Csv за замовчуванням пише ASCII і замінює кирилицю на ? – дивіться PowerShell.
  • Python: encode('ascii', errors='replace') мовчки замінює букви на ? – дивіться Python і pandas.
  • Консоль Windows: вона показує як ? букви, яких немає в її кодовій сторінці. Зазвичай неправильний лише показ, а не файл.
  • Старі поштові програми: лист без вказаного кодування відкривається з � або ? замість букв.

Як визначити, який у вас випадок

  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. Програми ставлять його, коли не можуть прочитати байт як букву. Він вказує на помилку кодування і не є частиною справжнього тексту.

Інші інструкції