Otázniky namiesto písmen: čo znamená ? a �

Namiesto ľ, š alebo č je v texte ? alebo symbol �? Vyzerajú podobne, no majú inú príčinu. Často je súbor úplne v poriadku. Niekedy sú však znaky už stratené. Tu zistíte, o ktorý prípad ide.

Funguje s textom aj súbormi:

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

Napríklad exporty z Excelu, výpisy databáz, titulky alebo kód webových stránok.

Opraviť

  1. Pretiahnite súbor alebo vložte text
  2. Oprava prebehne automaticky
  3. Skopírujte alebo stiahnite
alebo súbor jednoducho pretiahnite sem

Prípad 1: � v súbore, ktorý je v poriadku

Editor, prehrávač alebo prehliadač ukazuje namiesto ť, ž alebo ô symbol �? Súbor je väčšinou uložený v starom kódovaní Windows-1250 (ANSI) alebo ISO-8859-2, no program ho číta ako UTF-8. Bajt písmena s mäkčeňom či dĺžňom nie je v UTF-8 platný. Program preto pri zobrazení vloží náhradný znak �. V súbore je však stále správny bajt.

Riešenie: Pretiahnite pôvodný súbor do poľa vyššie. Mojibuster pri čítaní rozpozná kódovanie a prevedie súbor do UTF-8. Dôležité: použite priamo súbor, nekopírujte text z programu. Kopírovaním sa � stane trvalým. Viac o starom kódovaní nájdete na stránke prevod Windows-1250 na UTF-8.

Prípad 2: � alebo ? je uložený priamo v texte

Ak program uložil alebo odovzdal text aj s náhradným znakom, pôvodné písmeno je preč. Rovnako je to s ?. Programy ho vkladajú, keď znak v cieľovom kódovaní neexistuje. Stáva sa to napríklad pri uložení ako ASCII alebo pri zápise do stĺpca databázy, ktorý ľ nepozná.

Spätne sa z toho nedá nič vypočítať, lebo každé písmeno s diakritikou sa zmenilo na ten istý znak. Mojibuster preto nehádá, ale ukáže, koľko miest je postihnutých. Pomôže len zdroj: zopakujte export alebo použite zálohu.

Typické príčiny otáznikov

  • Databáza: stĺpec alebo pripojenie používa latin1 alebo ascii, no dáta prichádzajú v UTF-8. Kódovanie latin1 nemá ľ, ť ani č, a MySQL ich nahradí znakom ?. Pozrite MySQL a phpMyAdmin.
  • PHP bez znakovej sady: stránka alebo pripojenie k databáze nemá nastavené UTF-8. Prehliadač potom ukazuje � alebo sa do databázy uloží ?.
  • PowerShell 5.1: Export-Csv zapisuje v predvolenom nastavení ASCII a písmená s diakritikou nahradí znakom ?. Pozrite PowerShell.
  • Python: encode('ascii', errors='replace') potichu nahradí znaky otáznikom. Pozrite Python a pandas.
  • Poznámkový blok: pri uložení ako ANSI sa znaky, ktoré Windows-1250 nemá (napríklad emoji alebo azbuka), zmenia na ?.
  • Príkazový riadok: konzola Windows ukazuje znaky, ktoré jej znaková sada nepozná, ako ?. Väčšinou je zlé len zobrazenie, nie súbor.
  • Staršie e-mailové programy: správa bez uvedeného kódovania sa u príjemcu zobrazí s � alebo ? namiesto diakritiky.

Ako zistiť, o ktorý prípad ide

  1. Otvorte súbor v editore, ktorý ukazuje kódovanie, napríklad v Notepad++. Ak stavový riadok ukazuje „ANSI“ alebo „Windows-1250“, ide o prípad 1.
  2. Pretiahnite súbor do Mojibustera. Ak výsledok uvedie, že súbor bol prečítaný ako Windows-1250, a písmená sú späť, išlo o prípad 1.
  3. Ak Mojibuster hlási stratené znaky, ide o prípad 2. Vtedy pomôže len nový export.

Ak namiesto otáznikov vidíte znaky ako Äľ namiesto ľ alebo š namiesto š, ide o inú chybu – rozsypaný čaj. Ten sa dá takmer vždy opraviť: čo je rozsypaný čaj.

Časté otázky

Vie Mojibuster zmeniť ? späť na písmená?

Nie. ? môže zastupovať akékoľvek písmeno, informácia je preč. Mojibuster také miesta nemení, ale ukáže, koľko ich je.

Prečo vidím � v jednom programe, ale v inom nie?

Potom je súbor v poriadku a len jeden z programov ho číta v nesprávnom kódovaní. Preveďte ho Mojibusterom do UTF-8 a oba programy ho ukážu správne.

Čo je znak �?

Náhradný znak U+FFFD. Programy ho vkladajú, keď nedokážu bajt prečítať ako znak. Ukazuje na chybu kódovania a nie je súčasťou skutočného textu.

Ďalšie návody