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.


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ć
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.