Poradniki

Krzaki zamiast liter w pliku CSV? Skąd się biorą i jak to naprawić

Zespół Opener5 min czytania

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:

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:

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.