Как я могу преобразовать несколько файлов в кодировку 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
Вы должны заключить в кавычки переменную $ i, чтобы обрабатывать имена файлов с пробелами.
Ричард Хоскинс
Это будет делать вещи, это добавит спецификацию для одного ...
Джейсон
Вы уверены, что iconv добавит спецификацию? У меня сложилось впечатление, что это не будет с UTF-8.
Ричард Хоскинс
5
Я только что проверил это с помощью iconv (GNU libiconv 1.11), и он не добавил спецификацию. Насколько я понимаю, iconv будет добавлять спецификацию, только если она присутствует во входных данных, чего не было бы в ASCII. Спецификация проблематична и необязательна для UTF-8.
Ричард Хоскинс
2
если ваша версия iconv не поддерживает параметр -o, вы можете напрямую заменить его на >>, чтобы использовать перенаправление оболочки.
ограбить