Krzaki zamiast liter w pliku CSV? Skąd się biorą i jak to naprawić
Dziwne znaki, takie jak „é” czy „Сума”, oznaczają, że plik CSV zapisano w jednym kodowaniu tekstu, a otwarto tak, jakby był w innym — litery nadal są w pliku, tylko są źle dekodowane. Otwórz go z właściwym kodowaniem (Przeglądarka CSV wykrywa je automatycznie) i zapisz kopię w UTF-8. Znaki zapytania („????”) to co innego: zwykle oznaczają, że litery zginęły już przy zapisie pliku.
Czym jest kodowanie — w minutę
Plik CSV to zwykły tekst, a na dysku tekst jest po prostu ciągiem liczb (bajtów). Kodowanie to tabela, która mówi, która liczba oznacza którą literę. Dla podstawowych liter alfabetu angielskiego i cyfr niemal wszystkie kodowania są zgodne — dlatego kwoty w eksporcie z banku wyglądają dobrze, a nazwy i opisy zamieniają się w krzaki.
Trzy kodowania, które spotkasz w eksportach z programów księgowych i banków:
- UTF-8 — nowoczesny standard. Potrafi przechowywać każdy alfabet w jednym pliku. Litery spoza podstawowego alfabetu angielskiego zajmują po dwa bajty lub więcej.
- Windows-1251 — starsze jednobajtowe kodowanie dla cyrylicy (ukraiński, rosyjski, bułgarski, serbski). Wiele starszych programów księgowych nadal w nim eksportuje.
- Windows-1252 — starsze jednobajtowe kodowanie dla języków zachodnioeuropejskich: é, ü, ñ, ø, € i tak dalej.
Sam plik zwykle nie mówi, jakiego kodowania używa. Program, który go otwiera, musi zgadywać, a jeśli zgadnie źle, dostajesz mojibake — techniczną nazwę takiego zniekształconego tekstu (po polsku potocznie: krzaki).
Czytaj krzaki: co mówi każdy wzór
Rodzaj krzaków podpowiada, co poszło nie tak.
| Widzisz | Powinno być | Co się stało |
|---|---|---|
é, ü, € |
é, ü, € | Plik UTF-8 otwarty jako Windows-1252 |
Сума (dużo Ð i Ñ) |
Сума | Cyrylica w UTF-8 otwarta jako Windows-1252 |
Ñóìà (łacińskie litery ze znakami diakrytycznymi) |
Сума | Plik Windows-1251 otwarty jako Windows-1252 |
Cafй |
Café | Plik Windows-1252 otwarty jako Windows-1251 |
� (czarny romb ze znakiem zapytania) |
dowolna litera | Plik w starszym kodowaniu otwarty jako UTF-8 |
???? |
dowolna litera | Litery utracone przy zapisie pliku |
Pary w rodzaju „Ô + coś albo „Д/„Ñ” + coś to odcisk palca UTF-8 odczytanego jako starsze kodowanie: każda litera spoza alfabetu angielskiego zajmuje w UTF-8 dwa bajty, a stara tabela pokazuje każdy bajt jako osobny symbol. To dobra wiadomość — nic nie zginęło, a otwarcie pliku jako UTF-8 wszystko naprawia.
Same znaki zapytania to zła wiadomość. Zwykle pojawiają się, gdy program próbował zapisać tekst w kodowaniu, które nie ma miejsca na te litery (na przykład cyrylicę w Windows-1252), i zastąpił każdą z nich znakiem ?. Oryginalnych liter nie ma już w pliku i żaden program ich nie przywróci. Rozwiązanie: wyeksportuj plik ponownie z systemu źródłowego, wybierając UTF-8 lub właściwe kodowanie regionalne, jeśli okno eksportu daje taką możliwość.
BOM: dlaczego Excel źle odczytuje UTF-8
Plik UTF-8 może zaczynać się od trzech niewidocznych bajtów zwanych znacznikiem kolejności bajtów (BOM, byte order mark). To wskazówka mówiąca „ten plik jest w UTF-8”.
Gdy klikasz CSV dwukrotnie, Excel mocno polega na tej wskazówce. Z BOM zwykle poprawnie odczytuje UTF-8; bez niego często zakłada starsze kodowanie Twojego komputera — i właśnie tak całkowicie poprawny eksport UTF-8 z banku zamienia się w „Сума”. Inne programy działają odwrotnie i wyświetlają BOM jako śmieci w rodzaju  na początku nagłówka pierwszej kolumny. Jeśli to widzisz, plik jest w UTF-8, a BOM jest pokazywany jako tekst.
Sposób 1: otwórz plik z automatycznym wykrywaniem
Najszybciej jest pozwolić, by coś wykryło kodowanie za Ciebie. Przeglądarka CSV w Opener najpierw próbuje UTF-8, a w zależności od tekstu przechodzi na Windows-1251 lub Windows-1252, więc nazwy i opisy wyświetlają się poprawnie bez kreatora importu. Wykrywa też separator — przecinek, średnik, tabulator lub pionową kreskę.
Plik jest odczytywany w Twojej przeglądarce i nigdzie nie jest wysyłany, co ma znaczenie przy listach płac, fakturach i wyciągach bankowych. Aby naprawić plik dla innych programów, użyj przycisku eksportu: dostaniesz czystą kopię tabeli w UTF-8 (bieżący widok, więc jeśli chcesz wszystkie wiersze, najpierw wyczyść wyszukiwanie). Jeśli Twój problem polega na tym, że wszystko ląduje w jednej kolumnie, a nie na zniekształconych literach, zobacz, dlaczego CSV otwiera się w jednej kolumnie.
Sposób 2: zaimportuj plik w Excelu z właściwym „File origin”
Nie klikaj pliku dwukrotnie. Zamiast tego otwórz pusty skoroszyt i użyj importu z pliku tekstowego/CSV na karcie Dane (w angielskiej wersji „From Text/CSV”). Okno podglądu ma listę „File origin” (pochodzenie pliku), w której wybierasz kodowanie:
- 65001: Unicode (UTF-8) dla plików pokazujących
élubСума; - opcję z numerem 1251 (cyrylica, Windows) dla starszych eksportów w cyrylicy;
- opcję z numerem 1252 (zachodnioeuropejskie, Windows) dla starszych eksportów zachodnioeuropejskich.
Przełączaj się między nimi i obserwuj podgląd — w chwili, gdy nazwy wyglądają dobrze, masz właściwe kodowanie. Potem załaduj dane. Jeśli musisz przesłać plik dalej, zapisz go w Excelu jako typ „CSV UTF-8”, a nie zwykły „CSV”, który może znowu użyć starszego kodowania.
Sposób 3: Google Sheets, LibreOffice lub edytor tekstu
Google Sheets. Import pliku CSV do Google Sheets (Plik → Importuj) działa dobrze z plikami UTF-8, a okno importu pozwala wybrać separator. Przy plikach w starszych kodowaniach to mniej pewna droga: jeśli eksport w Windows-1251 lub Windows-1252 nadal pokazuje zniekształcone litery, przekonwertuj go do UTF-8 jedną z pozostałych metod i zaimportuj tę kopię.
LibreOffice Calc. Gdy otwierasz CSV, LibreOffice pokazuje okno importu tekstu z listą Zestaw znaków. Wybierz Unicode (UTF-8), cyrylicę (Windows-1251) lub zachodnioeuropejskie (Windows-1252), a podgląd od razu się zaktualizuje. Program jest darmowy i działa na Windows, macOS i Linuksie.
Edytor tekstu. Edytory takie jak Notatnik w Windows, TextEdit w macOS czy edytor kodu, np. VS Code, pozwalają wybrać kodowanie przy zapisie. Haczyk: edytor musi najpierw otworzyć plik z właściwym kodowaniem. Jeśli tekst wygląda w edytorze poprawnie, zapisz go jako UTF-8. Jeśli już tam wygląda na zniekształcony, zapis tylko utrwali krzaki — najpierw otwórz plik ponownie z właściwym kodowaniem.
Najczęstsze pytania
Czy da się naprawić „????” w pliku CSV?
Zwykle nie. Znaki zapytania oznaczają, że znaki zostały zastąpione przy zapisie pliku, więc oryginalnych liter w nim nie ma. Wyeksportuj plik ponownie z programu księgowego lub banku, w miarę możliwości wybierając UTF-8.
Jakiego kodowania używać przy zapisie lub eksporcie?
UTF-8. Przechowuje każdy alfabet i rozumie je każdy nowoczesny program. Jeśli współpracownicy otwierają plik dwukrotnym kliknięciem w Excelu, użyj w Excelu opcji „CSV UTF-8”, aby plik zaczynał się od BOM.
Czy zmiana kodowania zmieni moje liczby?
Nie. Cyfry, kropki i przecinki są takie same w UTF-8, Windows-1251 i Windows-1252, więc kwoty i daty pozostają bez zmian. Zmieniają się tylko litery spoza podstawowego alfabetu angielskiego.
Czy bezpiecznie jest naprawiać eksport z banku online?
Tylko jeśli narzędzie go nie wysyła. Przeglądarka CSV dekoduje i eksportuje plik w całości w Twojej przeglądarce, więc wyciąg nigdy nie opuszcza Twojego urządzenia.