Як я можу конвертувати декілька файлів у кодування UTF-8 за допомогою інструментів * nix командного рядка? [дублікат]


46

Можливий дублікат:
Пакетне перетворення файлів для кодування або закінчення рядка

У мене є маса текстових файлів, які я хотів би перетворити з будь-якої заданої діаграми в кодування UTF-8.

Чи є якісь інструменти командного рядка чи Perl (чи мова на ваш вибір), які я можу використовувати, щоб зробити це масово?

Відповіді:


56

iconv перетворює між багатьма кодованими символами. Тож додамо трохи баш магії і ми можемо писати

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

Це запускається iconv -f ascii -t utf-8до кожного файлу, що закінчується .txt, і надсилатиме відтворений файл до того ж імені, але закінчується .utf8.txtзамість .txt.

Це не так, якби це насправді щось зробило б ваші файли (адже ASCII - це підмножина UTF-8), а відповісти на ваше запитання про перетворення між кодуванням.


2
Ви повинні цитувати var $ i, щоб обробляти імена файлів з пробілами.
Річард Хоскінс

Це зробить справи, додасть BOM для одного ...
Jason

Ви впевнені, що iconv додасть BOM? У мене було враження, що це не буде з UTF-8.
Річард Хоскінс

5
Я щойно тестував це за допомогою iconv (GNU libiconv 1.11), і він не додав BOM. Наскільки я розумію, що iconv додасть BOM лише у тому випадку, якщо він буде присутній у вході, якого він не був би в ASCII. BOM є проблематичними і не потрібні з UTF-8.
Річард Хоскінс

2
якщо ваша версія iconv не підтримує параметр -o, ви можете безпосередньо замінити його на >> для використання перенаправлення оболонки.
пограбувати
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.