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

Вместо ж, ъ или щ в текста виждате ? или знака �? Двата знака си приличат, но причините са различни. Често файлът е напълно изправен, понякога обаче буквите вече са загубени. Ето как да разберете кой е вашият случай.

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

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

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

Поправяне

  1. Пуснете файл или поставете текст
  2. Поправката е автоматична
  3. Копирайте или изтеглете
или просто пуснете файл тук

Случай 1: � във файл, който всъщност е наред

Ако редактор, видеоплейър или браузър показва � на мястото на всяка българска буква, файлът обикновено е записан в старото кодиране Windows-1251, а програмата го чете като UTF-8. Байтовете на кирилските букви са невалидни в UTF-8 и програмата слага знака � само при показването. Във файла си стоят правилните байтове.

Типичен пример са субтитри .srt в Windows-1251, пуснати във VLC или на телевизор. Същото се случва със стари сайтове, текстови файлове от счетоводни програми и имейли от стари пощенски програми.

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

Случай 2: � или ? е записан в самия текст

Ако програма е записала или предала текста със знака �, оригиналната буква е загубена. Същото важи за ?: програмите го слагат, когато дадена буква я няма в кодирането, в което записват. Например при запис като ASCII или в колона на базата данни, която не познава кирилица.

От това нищо не може да се изчисли обратно, защото всички букви са станали един и същ знак. Вместо да гадае, Mojibuster ви казва колко места са засегнати. Помага само източникът: повторете експорта или вземете резервно копие.

Типични причини за въпросителни знаци

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

Как да разберете кой е вашият случай

  1. Отворете файла в редактор, който показва кодирането, например Notepad++. Ако в лентата долу пише „ANSI“ или „Windows-1251“, това е случай 1.
  2. Пуснете файла в Mojibuster. Ако резултатът показва, че файлът е прочетен като Windows-1251, и буквите са се върнали, това е бил случай 1 – вижте Windows-1251 към UTF-8.
  3. Ако Mojibuster съобщава за загубени знаци, това е случай 2. Тогава помага само нов експорт.

Ако вместо въпросителни виждате поредици като Град вместо Град, това е друга грешка – и тя почти винаги може да се поправи: какво е mojibake.

Често задавани въпроси

Може ли Mojibuster да върне ? обратно в букви?

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

Защо в една програма виждам �, а в друга не?

Значи файлът е наред и само едната програма го чете с грешно кодиране. Превърнете го в UTF-8 с Mojibuster и двете ще го показват правилно.

Какво е знакът �?

Заместващият знак U+FFFD. Програмите го слагат, когато не могат да прочетат байт като буква. Той сочи грешка в кодирането и не е част от истинския текст.

Други ръководства