Znaki zapytania zamiast polskich liter: co znaczą ? i �

Zamiast ą, ł czy ż w tekście widać ? albo symbol �? Wyglądają podobnie, ale mają różne przyczyny. Często sam plik jest w porządku. Czasem jednak litery już zginęły. Tak sprawdzisz, który przypadek dotyczy ciebie.

Działa z tekstem i plikami:

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

Na przykład eksporty z Excela, zrzuty baz danych, napisy do filmów lub kod stron.

Napraw

  1. Przeciągnij plik lub wklej tekst
  2. Naprawa następuje automatycznie
  3. Skopiuj lub pobierz
albo po prostu przeciągnij plik tutaj

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 latin1 albo ascii, a dane przychodzą w UTF-8. W latin1 nie 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-Csv domyś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

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

Więcej poradników