iconv to systemowe narzędzie do konwersji kodowania znaków w plikach tekstowych. Czytasz plik zapisany w jednym kodowaniu (np. starym ISO-8859-2 czy windowsowym CP1250), a iconv wypluwa ten sam tekst zapisany w innym, najczęściej UTF-8. To pierwsza rzecz, po którą sięgasz, gdy w terminalu zamiast polskich ogonków widzisz krzaki typu za��ó��ka, a w pliku CSV od księgowej zamiast „ł” siedzi „³”. iconv jest częścią glibc, więc na każdym Linuksie jest dostępny od ręki.
Składnia i najważniejsze opcje
Podstawowa składnia wygląda tak: iconv -f KODOWANIE_ZRODLA -t KODOWANIE_DOCELOWE plik. Domyślnie wynik leci na standardowe wyjście (ekran), więc prawie zawsze przekierowujesz go do pliku albo używasz -o.
-f, --from-code— kodowanie pliku wejściowego (z czego konwertujesz)-t, --to-code— kodowanie docelowe (na co konwertujesz)-o, --output PLIK— zapisuje wynik do pliku zamiast na ekran-l, --list— wypisuje wszystkie znane kodowania, jakie obsługuje Twój system-c— pomija znaki, których nie da się przekonwertować, zamiast przerywać z błędem//TRANSLIT— dopisek do kodowania docelowego: znaki spoza zestawu zastępuje podobnymi (np. „ä” na „a”), a beznadziejne przypadki dostają „?”//IGNORE— dopisek do kodowania docelowego: po prostu wyrzuca znaki nie do konwersji
Przykłady użycia
iconv -f ISO-8859-2 -t UTF-8 plik.txt > plik_utf8.txt— klasyk: stary plik w Latin-2 ląduje jako czysty UTF-8.iconv -f WINDOWS-1250 -t UTF-8 -o czysty.csv brudny.csv— naprawia CSV z Windowsa, zapisując wynik przez-obez przekierowania.iconv -f UTF-8 -t ASCII//TRANSLIT nazwa.txt— spłaszcza polskie znaki do ASCII (np. do nazw plików), zamieniając „ó” na „o”.iconv -f UTF-8 -t ISO-8859-1//IGNORE -o out.txt in.txt— wymusza konwersję do Latin-1 i milcząco wyrzuca to, co się nie mieści.iconv -l | grep -i 1250— sprawdza, czy Twój system zna dane kodowanie, zanim się zdziwisz.
Częste błędy i pułapki
Najczęstszy komunikat to iconv: illegal input sequence at position N — oznacza, że źródłowe kodowanie podane po -f nie zgadza się z rzeczywistością pliku. Zanim ratujesz się -c albo //IGNORE, ustal prawdziwe kodowanie poleceniem file -i plik.txt, bo te flagi po cichu kasują dane.
Druga mina: nie nadpisuj pliku wejściowego w tym samym poleceniu. iconv ... plik > plik wyzeruje plik, zanim iconv zdąży go przeczytać — zostaniesz z pustką. Zawsze zapisuj do nowej nazwy albo używaj -o na inny plik.
Pamiętaj też, że nazwy kodowań nie rozróżniają wielkości liter (utf-8 i UTF-8 działają tak samo), ale ich zestaw zależy od systemu — wersja na macOS/BSD potrafi mieć ich mniej niż glibc na Linuksie, więc iconv -l bywa różny na różnych maszynach.
Powiązane komendy: file (wykrywanie kodowania), recode (alternatywna konwersja), dos2unix (zamiana znaków końca linii), enca (zgadywanie kodowania tekstów).