Bagaimana saya bisa mengonversi banyak file ke pengkodean UTF-8 menggunakan alat baris perintah * nix? [duplikat]

Jawaban:

56

iconv memang mengkonversi antara banyak pengkodean karakter. Jadi tambahkan sedikit bash magic dan kita bisa menulis

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

Ini akan berjalan iconv -f ascii -t utf-8ke setiap file yang berakhir dengan .txt, mengirimkan file yang telah dikodekan ulang ke file dengan nama yang sama tetapi berakhir dengan .utf8.txtalih-alih .txt.

Ini bukan seolah-olah ini akan benar-benar melakukan apa saja pada file Anda (karena ASCII adalah bagian dari UTF-8), tetapi untuk menjawab pertanyaan Anda tentang cara mengkonversi antar pengkodean.

Vinko Vrsalovic
sumber
2
Anda harus mengutip var $ i, untuk menangani nama file dengan spasi.
Richard Hoskins
Ini akan melakukan hal-hal, itu akan menambahkan BOM untuk satu ...
jason
Apakah Anda yakin iconv akan menambahkan BOM? Saya mendapat kesan bahwa itu tidak akan dengan UTF-8.
Richard Hoskins
5
Saya baru saja menguji ini dengan iconv (GNU libiconv 1.11), dan itu tidak menambahkan BOM. Ini adalah pemahaman saya bahwa iconv hanya akan menambahkan BOM jika ada di input, yang tidak akan di ASCII. BOM bermasalah, dan tidak perlu dengan UTF-8.
Richard Hoskins
2
jika versi ikonv Anda tidak mendukung parameter -o, Anda dapat langsung menggantinya dengan >> untuk menggunakan pengalihan shell.
merampok