Případ 1: � v souboru, který je v pořádku
Editor, přehrávač nebo prohlížeč ukazuje místo ř, š nebo í symbol �? Soubor je většinou uložený ve starém kódování Windows-1250 (ANSI) nebo ISO-8859-2, ale program ho čte jako UTF-8. Bajt písmene s diakritikou není v UTF-8 platný. Program proto při zobrazení vloží náhradní znak �. V souboru je ale pořád správný bajt.
Řešení: Přetáhněte původní soubor do pole výše. Mojibuster při čtení pozná kódování a převede soubor do UTF-8. Důležité: použijte přímo soubor, nekopírujte text z programu. Kopírováním se � stane trvalým. Víc o starém kódování najdete na stránce převod Windows-1250 na UTF-8.
Případ 2: � nebo ? je uložený přímo v textu
Pokud program uložil nebo předal text i s náhradním znakem, původní písmeno je pryč. Stejné je to s ?. Programy ho vkládají, když znak v cílovém kódování neexistuje. Stává se to třeba při uložení jako ASCII nebo při zápisu do sloupce databáze, který ř nezná.
Zpětně se z toho nic spočítat nedá, protože každé písmeno s diakritikou se změnilo na stejný znak. Mojibuster proto nehádá, ale ukáže, kolik míst je postižených. Pomůže jen zdroj: zopakujte export nebo použijte zálohu.
Typické příčiny otazníků
- Databáze: sloupec nebo připojení používá
latin1neboascii, ale data přicházejí v UTF-8. Kódovánílatin1nemář,ěanič, a MySQL je nahradí znakem?. Viz MySQL a phpMyAdmin. - PHP bez znakové sady: stránka nebo připojení k databázi nemá nastavené UTF-8. Prohlížeč pak ukazuje
�nebo se do databáze uloží?. - PowerShell 5.1:
Export-Csvzapisuje ve výchozím nastavení ASCII a písmena s diakritikou nahradí znakem?. Viz PowerShell. - Python:
encode('ascii', errors='replace')potichu nahradí znaky otazníkem. Viz Python a pandas. - Poznámkový blok: při uložení jako ANSI se znaky, které Windows-1250 nemá (třeba emoji nebo azbuka), změní na
?. - Příkazový řádek: konzole Windows ukazuje znaky, které její znaková sada nezná, jako
?. Většinou je špatně jen zobrazení, ne soubor. - Starší e-mailové programy: zpráva bez uvedeného kódování se u příjemce zobrazí s
�nebo?místo diakritiky.
Jak poznat, o který případ jde
- Otevřete soubor v editoru, který ukazuje kódování, třeba v Notepad++. Pokud stavový řádek ukazuje „ANSI“ nebo „Windows-1250“, jde o případ 1.
- Přetáhněte soubor do Mojibusteru. Pokud výsledek uvede, že byl soubor načten jako Windows-1250, a znaky jsou zpět, šlo o případ 1. Viz převod Windows-1250 na UTF-8.
- Pokud Mojibuster hlásí ztracené znaky, jde o případ 2. Pak pomůže jen nový export.
Pokud místo otazníků vidíte znaky jako Ä› nebo Ĺ™, jde o jinou chybu – a ta se dá téměř vždy opravit: co je rozsypaný čaj.
Časté otázky
Umí Mojibuster změnit ? zpátky na písmena?
Ne. ? může zastupovat jakékoli písmeno, informace je pryč. Mojibuster taková místa nemění, ale ukáže, kolik jich je.
Proč vidím � v jednom programu, ale v jiném ne?
Pak je soubor v pořádku a jen jeden z programů ho čte ve špatném kódování. Převeďte ho Mojibusterem do UTF-8 a oba programy ho ukážou správně.
Co je znak �?
Náhradní znak U+FFFD. Programy ho vkládají, když nedokážou bajt přečíst jako znak. Ukazuje na chybu kódování a není součástí skutečného textu.