Przypadek 1: � w pliku, który jest w porządku
Jeśli edytor, przeglądarka albo inny program pokazuje � w miejscu polskich liter, plik jest zwykle zapisany w starym kodowaniu Windows-1250 (ANSI) lub ISO-8859-2, a program czyta go jako UTF-8. Bajt litery takiej jak ą czy ś jest w UTF-8 nieprawidłowy, więc program przy wyświetlaniu wstawia znak zastępczy �. W samym pliku nadal jest właściwy bajt.
Rozwiązanie: Przeciągnij oryginalny plik do pola powyżej. Mojibuster rozpozna kodowanie przy wczytywaniu i zapisze plik w UTF-8. Ważne: użyj samego pliku, nie kopiuj tekstu z programu – po skopiowaniu � zostaje na stałe. Więcej o tym kodowaniu: Windows-1250 na UTF-8.
Typowe sytuacje: plik zapisany w Notatniku jako ANSI i otwarty na Macu lub w nowym programie, strona w PHP bez ustawionego zestawu znaków, e-mail ze starego programu pocztowego w ISO-8859-2 albo stare pliki z archiwum otwarte w nowoczesnym edytorze.
Przypadek 2: � lub ? jest zapisany w tekście
Jeśli program zapisał albo przekazał dalej tekst ze znakiem zastępczym, oryginalna litera zginęła. Tak samo jest z ?: programy wstawiają go, gdy danej litery nie ma w docelowym kodowaniu – na przykład przy zapisie jako ASCII albo do kolumny w bazie danych, w której nie ma ł.
Z tego nie da się niczego odtworzyć, bo każda polska litera zamieniła się w ten sam znak. Mojibuster nie zgaduje, tylko podaje, ile miejsc jest dotkniętych. Pomoże tylko źródło: powtórz eksport albo użyj kopii zapasowej.
Typowe przyczyny znaków zapytania
- Baza danych: kolumna lub połączenie używa
latin1alboascii, a dane przychodzą w UTF-8. Wlatin1nie ma literą,ę,ł,ś,ż, więc MySQL zamienia je na?– zobacz MySQL i phpMyAdmin. - PHP: skrypt łączy się z bazą bez ustawionego
charset(np.utf8mb4). Wtedy polskie litery mogą zamienić się w?już przy zapisie. - PowerShell 5.1:
Export-Csvdomyślnie zapisuje w ASCII i zamienia polskie litery na?– zobacz PowerShell. - Python:
encode('ascii', errors='replace')bez ostrzeżenia zamienia litery na?– zobacz Python i pandas. - Konsola: wiersz poleceń Windows pokazuje jako
?znaki, których nie zna jego strona kodowa. Zwykle źle jest tylko wyświetlanie, a nie plik.
Jak sprawdzić, który to przypadek
- Otwórz plik w edytorze, który pokazuje kodowanie, np. w Notepad++. Jeśli na pasku stanu widać „ANSI” albo „Windows-1250”, to przypadek 1.
- Przeciągnij plik do Mojibustera. Jeśli wynik podaje, że plik odczytano jako Windows-1250, a polskie litery wróciły, to był przypadek 1 – zobacz Windows-1250 na UTF-8.
- Jeśli Mojibuster zgłasza utracone znaki, to przypadek 2. Pomoże wtedy tylko nowy eksport.
Jeśli zamiast znaków zapytania widzisz ciągi takie jak Ä… czy Ĺ‚, to inny błąd – i prawie zawsze da się go naprawić: co to są krzaki (mojibake).
Najczęstsze pytania
Czy Mojibuster zamieni ? z powrotem na litery?
Nie. ? może oznaczać dowolną literę, informacja przepadła. Mojibuster nie zmienia takich miejsc, ale podaje, ile ich jest.
Dlaczego w jednym programie widzę �, a w innym nie?
To znaczy, że plik jest w porządku, a tylko jeden z programów czyta go w złym kodowaniu. Przekonwertuj plik do UTF-8 w Mojibusterze, a oba programy pokażą go poprawnie.
Co to jest znak �?
To znak zastępczy U+FFFD. Programy wstawiają go, gdy nie potrafią odczytać bajtu jako znaku. Wskazuje na błąd kodowania i nie jest częścią właściwego tekstu.