Команда iconv

Команда iconv предназначена для вызова одноименной утилиты, осуществляющей смену кодировки символов текстовых файлов. Под кодировкой символов подразумевается способ преобразования байтовых последовательностей в отдельные текстовые символы.

Базовый синтаксис команды выглядит следующим образом:

$ iconv [параметры] -f исходная-кодировка-символов [-t результирующая-кодировка-символов] [-o результирующий-файл]

Данная утилита не поддерживает большого количества параметров и достаточно проста в использовании. Вам нужно помнить лишь о том, что параметр -f должен всегда использоваться для указания исходной кодировки символов, а параметр -t — для указания результирующей кодировки символов. Использование параметра -o для указания результирующего файла не обязательно; в случае его отсутствия результирующие данные будут выводиться с помощью стандартного потока вывода. Для получения полного списка поддерживаемых утилитой кодировок символов может использоваться параметр -l. Для фильтрации непреобразуемых символов — параметр -c.

Примеры использования

Получение списка поддерживаемых кодировок

Для получения списка поддерживаемых кодировок следует использовать параметр -l утилиты iconv:

$ iconv -l

Следующий список содержит все известные встроенные кодировки. Это не обязательно означает, что можно использовать любые комбинации данных имён в параметрах командной строки -f и -t. Одна и та же кодировка может быть указана под несколькими именами (псевдонимами).

437, 500, 500V1, 850, 851, 852, 855, 856, 857, 858, 860, 861, 862, 863, 864,
865, 866, 866NAV, 869, 874, 904, 1026, 1046, 1047, 8859_1, 8859_2, 8859_3,
8859_4, 8859_5, 8859_6, 8859_7, 8859_8, 8859_9, 10646-1:1993,

Список является достаточно длинным, поэтому вывод сокращен.

Преобразование кодировок текстовых документов

Для преобразования кодировки текстового документа достаточно указать путь к файлу этого документа, путь к результирующему файлу после параметра -o (если вы не хотите, чтобы результат выводился с помощью стандартного потока вывода), а также названия исходной и результирующей кодировок после параметров -f и -t соответственно.

Имеется следующий файл с текстом на русском языке.

$ cat fragment-ru.txt
Гордость и предубеждение
Джейн Остин
Глава 1
В целом мире не сыскать безумца, который решился бы оспорить тот факт, что богатый холостяк непременно должен находиться в постоянном поиске спутницы жизни.
Разумеется, бесспорно и то, что такой холостяк вполне может пребывать в полном неведении относительно своего счастливого положения; однако каждый раз, поселяясь в новом месте, он весьма скоро обнаруживает, что взгляды отцов соседствующих семейств преисполнены участливого понимания, а их жены — матери многочисленных дочерей на выданье — поглядывают на нового члена общества с плохо скрываемым чувством собственничества.

Для определения кодировки символов в данном файле следует использовать утилиту uchardet:

$ uchardet fragment-ru.txt
UTF-8

Очевидно, что этот текст в кодировке UTF-8.

Для преобразования его в кодировку WINDOWS-1251 достаточно указать исходную кодировку символов после параметра -f, результирующую кодировку символов после параметра -t, а также имя результирующего файла с помощью параметра -o:

$ iconv -f UTF-8 -t WINDOWS-1251 fragment-ru.txt -o fragment-ru-win1251.txt

Снова проверим кодировку символов в текстовом файле:

$ uchardet fragment-ru-win1251.txt
WINDOWS-1251

В результате использования утилиты iconv кириллический текст в кодировке UTF-8 был преобразован в кириллический текст в кодировке WINDOWS-1251. Разумеется, обратное преобразование так же возможно:

$ iconv -f WINDOWS-1251 -t UTF-8 fragment-ru-win1251.txt -o fragment-ru-utf8.txt
$ uchardet fragment-ru-utf8.txt
UTF-8
$ cat fragment-ru-utf8.txt
Гордость и предубеждение
Джейн Остин
Глава 1
В целом мире не сыскать безумца, который решился бы оспорить тот факт, что богатый холостяк непременно должен находиться в постоянном поиске спутницы жизни.
Разумеется, бесспорно и то, что такой холостяк вполне может пребывать в полном неведении относительно своего счастливого положения; однако каждый раз, поселяясь в новом месте, он весьма скоро обнаруживает, что взгляды отцов соседствующих семейств преисполнены участливого понимания, а их жены — матери многочисленных дочерей на выданье — поглядывают на нового члена общества с плохо скрываемым чувством собственничества.

Если вам нужно вывести результат с помощью стандартного потока вывода, вы можете отказаться от параметра -o и имени результирующего файла:

$ iconv -f WINDOWS-1251 -t UTF-8 fragment-ru-win1251.txt
Гордость и предубеждение
Джейн Остин
Глава 1
В целом мире не сыскать безумца, который решился бы оспорить тот факт, что богатый холостяк непременно должен находиться в постоянном поиске спутницы жизни.
Разумеется, бесспорно и то, что такой холостяк вполне может пребывать в полном неведении относительно своего счастливого положения; однако каждый раз, поселяясь в новом месте, он весьма скоро обнаруживает, что взгляды отцов соседствующих семейств преисполнены участливого понимания, а их жены — матери многочисленных дочерей на выданье — поглядывают на нового члена общества с плохо скрываемым чувством собственничества.

Кроме того, утилита по умолчанию использует кодировку UTF-8 в качестве результирующей, поэтому параметр -t с именем выходной кодировки также может не использоваться:

$ iconv -f WINDOWS-1251 fragment-ru-win1251.txt
Гордость и предубеждение
Джейн Остин
Глава 1
В целом мире не сыскать безумца, который решился бы оспорить тот факт, что богатый холостяк непременно должен находиться в постоянном поиске спутницы жизни.
Разумеется, бесспорно и то, что такой холостяк вполне может пребывать в полном неведении относительно своего счастливого положения; однако каждый раз, поселяясь в новом месте, он весьма скоро обнаруживает, что взгляды отцов соседствующих семейств преисполнены участливого понимания, а их жены — матери многочисленных дочерей на выданье — поглядывают на нового члена общества с плохо скрываемым чувством собственничества.

Это очень удобно для ознакомления с содержимым текстового файла, не содержащего символов в кодировке UTF-8, к примеру, загруженного из сети.