Случай 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 показва като
?буквите, които кодовата му страница не познава. Обикновено е грешно само показването, не файлът.
Как да разберете кой е вашият случай
- Отворете файла в редактор, който показва кодирането, например Notepad++. Ако в лентата долу пише „ANSI“ или „Windows-1251“, това е случай 1.
- Пуснете файла в Mojibuster. Ако резултатът показва, че файлът е прочетен като Windows-1251, и буквите са се върнали, това е бил случай 1 – вижте Windows-1251 към UTF-8.
- Ако Mojibuster съобщава за загубени знаци, това е случай 2. Тогава помага само нов експорт.
Ако вместо въпросителни виждате поредици като Град вместо Град, това е друга грешка – и тя почти винаги може да се поправи: какво е mojibake.
Често задавани въпроси
Може ли Mojibuster да върне ? обратно в букви?
Не. ? може да означава всяка буква, информацията я няма. Mojibuster не пипа такива места, но ви казва колко са.
Защо в една програма виждам �, а в друга не?
Значи файлът е наред и само едната програма го чете с грешно кодиране. Превърнете го в UTF-8 с Mojibuster и двете ще го показват правилно.
Какво е знакът �?
Заместващият знак U+FFFD. Програмите го слагат, когато не могат да прочетат байт като буква. Той сочи грешка в кодирането и не е част от истинския текст.