Jak przekonwertować wiele plików na kodowanie UTF-8 za pomocą narzędzi wiersza poleceń * nix? [duplikować]

Odpowiedzi:

56

iconv dokonuje konwersji między wieloma kodowaniami znaków. Dodając trochę magii bashu i możemy pisać

for file in *.txt; do
    iconv -f ascii -t utf-8 "$file" -o "${file%.txt}.utf8.txt"
done

Spowoduje to uruchomienie iconv -f ascii -t utf-8każdego pliku kończącego się na .txt, wysyłając przekodowany plik do pliku o tej samej nazwie, ale kończącego się na .utf8.txtzamiast .txt.

To nie jest tak, jakby faktycznie zrobiłoby to coś dla twoich plików (ponieważ ASCII jest podzbiorem UTF-8), ale by odpowiedzieć na twoje pytanie dotyczące konwersji między kodowaniami.

Vinko Vrsalovic
źródło
2
Powinieneś zacytować var ​​$ i, aby obsłużyć nazwy plików ze spacjami.
Richard Hoskins,
Zrobi rzeczy, doda BOM dla jednego ...
jason
Czy na pewno iconv doda BOM? Miałem wrażenie, że nie byłoby tak w przypadku UTF-8.
Richard Hoskins,
5
Właśnie przetestowałem to z iconv (GNU libiconv 1.11) i nie dodałem BOM. Rozumiem, że iconv doda BOM tylko wtedy, gdy jest obecny na wejściu, czego nie byłoby w ASCII. LM są problematyczne i nie są konieczne w przypadku UTF-8.
Richard Hoskins,
2
jeśli twoja wersja iconv nie obsługuje parametru -o, możesz go bezpośrednio zastąpić >>, aby użyć przekierowania powłoki.
okradać