1. eset: � egy hibátlan fájlban
A szerkesztő, a lejátszó vagy a böngésző � jelet mutat az ő, á vagy ű helyén? A fájl általában a régi Windows-1250 (ANSI) vagy ISO-8859-2 kódolásban van mentve, a program viszont UTF-8-ként olvassa. Az ékezetes betű bájtja UTF-8-ban érvénytelen. A program ezért csak a megjelenítéskor tesz a helyére � helyettesítő jelet. A fájlban továbbra is a helyes bájt van.
Megoldás: Húzd az eredeti fájlt a fenti mezőbe. A Mojibuster beolvasáskor felismeri a kódolást, és UTF-8-ra alakítja a fájlt. Fontos: magát a fájlt használd, ne a programból másolt szöveget. Másoláskor a � végleges lesz. A régi kódolásról bővebben: Windows-1250 átalakítása UTF-8-ra.
2. eset: a � vagy a ? bekerült a szövegbe
Ha egy program a helyettesítő jellel együtt mentette vagy továbbította a szöveget, az eredeti betű elveszett. Ugyanez igaz a ? jelre. A programok akkor írják be, ha a karakter nem létezik a célkódolásban. Ez történik például ASCII-ként mentéskor, vagy ha egy adatbázis-oszlop nem ismeri az ő betűt.
Visszafelé ebből semmi sem számolható ki, mert minden ékezetes betű ugyanarra a jelre cserélődött. A Mojibuster ezért nem találgat, hanem megmutatja, hány hely érintett. Csak a forrás segít: ismételd meg az exportot, vagy használj biztonsági mentést.
A kérdőjelek gyakori okai
- Adatbázis: az oszlop vagy a kapcsolat
latin1vagyasciikódolású, az adatok viszont UTF-8-ban érkeznek. Alatin1ismeri azáés azébetűt, de azőés azűbetűt nem – ezért gyakran csak ez a kettő lesz?. Lásd: MySQL és phpMyAdmin. - PHP karakterkészlet nélkül: az oldalon vagy az adatbázis-kapcsolaton nincs beállítva az UTF-8. A böngésző ilyenkor
�jelet mutat, vagy?kerül az adatbázisba. - PowerShell 5.1: az
Export-Csvalapértelmezés szerint ASCII-t ír, és minden ékezetes betűt?jelre cserél. Lásd: PowerShell. - Python: az
encode('ascii', errors='replace')szó nélkül kérdőjelre cseréli a karaktereket. Lásd: Python és pandas. - Jegyzettömb: ANSI-ként mentéskor a Windows-1250-ben nem létező karakterek (például emojik vagy cirill betűk)
?jellé válnak. - Parancssor: a Windows konzolja
?jellel mutatja azokat a karaktereket, amelyeket a kódlapja nem ismer. Ilyenkor többnyire csak a megjelenítés hibás, a fájl nem. - Régi levelezőprogramok: a kódolás megadása nélkül küldött levélben a címzettnél
�vagy?áll az ékezetes betűk helyén.
Hogyan derül ki, melyik esetről van szó?
- Nyisd meg a fájlt egy olyan szerkesztőben, amely kiírja a kódolást, például a Notepad++-ban. Ha az állapotsorban „ANSI” vagy „Windows-1250” áll, az 1. esetről van szó.
- Húzd a fájlt a Mojibusterbe. Ha az eredmény szerint Windows-1250-ként olvasta be, és a betűk visszakerültek, az 1. eset volt.
- Ha a Mojibuster elveszett karaktereket jelez, a 2. esetről van szó. Ilyenkor csak egy új export segít.
Ha kérdőjelek helyett olyan jeleket látsz, mint Ĺ‘ vagy Å‘ az ő helyén, az egy másik hiba – és szinte mindig javítható: mi az a mojibake.
Gyakori kérdések
Vissza tudja alakítani a Mojibuster a ? jelet betűvé?
Nem. A ? bármelyik betűt jelentheti, az információ elveszett. A Mojibuster ezeket a helyeket nem módosítja, csak megmutatja, hány van belőlük.
Miért látok � jelet az egyik programban, a másikban viszont nem?
Akkor a fájl rendben van, csak az egyik program rossz kódolással olvassa. Alakítsd át a Mojibusterrel UTF-8-ra, és mindkét program helyesen mutatja.
Mi az a � jel?
Az U+FFFD helyettesítő karakter. A programok akkor teszik be, ha egy bájtot nem tudnak karakterként beolvasni. Kódolási hibát jelez, és nem része a valódi szövegnek.