$ file -i file.txt
file.txt: text/plain; charset=us-ascii
Давно в категории "Ubuntu" у меня не было материалов. Сегодня я исправлюсь и выпущу сразу две статьи. Итак, начнём. вам приходилось менять кодировку текстовых файлов в linux'e? А что если объем такого файла больше 10 Gb?!
Что бы изменить кодировку файла нужно использовать замечательную утилиту iconv. В параметрах необходимо указывать исходную кодировку
Как узнать кодировку файла в Linux
В этом нам поможет команда file:
$ file file.txt
file.txt: ASCII text, with no line terminators
Но лучше сразу с ключом -i.
$ file -i file.txt
file.txt: text/plain; charset=us-ascii
Изменить кодировку с помощью ICONV
Ну а далее вот такие действия:
iconv -f WINDOWS-1251 -t UTF-8 -o output_file.txt original_file.txt
где
-f WINDOWS-1251
- исходная кодировка, список исходных кодировок iconv -l, в команде работает tab, чтобы не опечататься
-t UTF-8 - конечная
-o output_file.txt - куда выводить результат
original_file.txt - исходный файл
Остальные ключики как обычно в man iconv.
iconv и большие файлы
Для быстрого выполнения процесса кодировки, iconv загружает файл в оперативную память и в swap. Но это работает только для небольших файлов. Если файл уж совсем большой, а ОЗУ не особо, то вы прост получите ошибку, мол "слишком большой файл", звиняйте хлопцы. Где взять такой файл? К примеру это может быть выборка из БД (игры для ipad, PC, PSP или другие данные)
Вот здесь предлагают различные решения данного вопроса: и скриптами, и разбивка на части, вывод в потоки, а потом обратно сборка в файл. Лично мне понравилось весьма простое решение: команда split - она позволяет разбить текстовый файл на более мелкие, а дальше с ними работать как угодно можно.
В простом варианте чтобы разбить файл на куски объёмом по 1Gb выполнить:
split -b 1000000000 file.txt
Это самые просты решения, эти команды можно использовать в различных скриптах и получить от этого много кайфов. Надеюсь эта заметка вам чем-то помогла.
Комментарии
пт, 08/30/2013 - 21:44
Смена кодировки файла в Linux http://yournet.kz/view/590
ср, 09/11/2013 - 18:17
Cпасибо, помогло, а вы не подскажете как узнать в какой кодировке файл? точнее его не читаемые куски вот для примера $content .= "
Кто онлайн: Нет пользователей Р В·Р В° последние 10 Р С
пт, 05/15/2015 - 15:09
попробуйте функцию mb_detect_encoding(), или воспользуйтесь декодером http://www.artlebedev.ru/tools/decoder/advanced/
вт, 06/30/2015 - 15:22
Спасибо за подсказку, нужно было обработать таким образом более 500 файлов( файлы .vcf) вот пример скрипта использующего iconv для обработки всех файлов vcf находящихся в каталоге #!/bin/sh mkdir konvert_vcf for i in *.vcf ; do iconv -f WINDOWS-1251 -t UTF-8 -o konvert_vcf/"$i" "$i" done