Otazníky místo písmen: co znamená ? a �

Místo ě, č nebo ř se v textu objevuje ? nebo symbol �? Vypadají podobně, ale mají jinou příčinu. Často je soubor úplně v pořádku. Někdy už jsou ale znaky ztracené. Tady zjistíte, o který případ jde.

Funguje s textem a soubory:

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

Například exporty z Excelu, výpisy databází, titulky nebo kód webových stránek.

Opravit

  1. Přetáhněte soubor nebo vložte text
  2. Oprava proběhne automaticky
  3. Zkopírujte nebo stáhněte
nebo soubor jednoduše přetáhněte sem

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á latin1 nebo ascii, ale data přicházejí v UTF-8. Kódování latin1 nemá ř, ě 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-Csv zapisuje 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

  1. 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.
  2. 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.
  3. 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.

Další návody