Переходя на Linux, Вы будете часто сталкиваться с вопросами кодировки текстовой информации. Например, текстовый файл созданный в Windows, будет совершенно не читаем при его открытии в Linux. Почему?

Дело в том, что система Windows, по умолчанию, сохраняет текстовые файлы в кодировке Windows-1251, а Linux – в кодировке KOI-8. В результате, текст выглядит не читаемым.

О том как решить проблему преобразования текста из одной кодировки в другую, далее.

И так, для решения проблемы с кодировкой, существует конечно-же множество способов, но мы рассмотрим только один из них:
– допустим, есть файл win1251.txt, в котором содержится текст, набранный в кодировке Windows-1251. Требуется перевести содержимое этого файла в кодировку koi8-r.

Для решения этой задачи, воспользуемся программой iconv, которая входит в базовый состав ОС Linux.

iconv – конвертирует текст из одной кодировки в другую. Исходная кодировка задаётся ключом -f, а выходная — ключом -t. Посмотреть полный список всех кодировок можно командой:

iconv -l

Список доступных кодировок

Список доступных кодировок

Общий формат этой команды таков:

iconv [-c] [-s] [-f encoding] [-t encoding] [inputfile ...]

1) Откройте окно терминала (Меню > Приложения > Стандартные > Терминал).

2) Перейдите в папку с текстовым файлом, который вам необходимо перевести в другую кодировку (команды ls и cd <имя_папки>).

3) Находясь в папке с файлом, выполните:

iconv -s -f WINDOWS-1251 -t UTF-8 "win1251.txt" > "koi8r.txt"

iconv результат работы

iconv2 результат работы

Рассмотрим пример подробнее:
1) Ключ -s используется для того, чтобы указать программе iconv не выводить ошибки, если таковые возникнут в работе;
2) Ключом -f мы указываем исходную кодировку файла WINDOWS-1251;
3) Ключом -t мы указываем новую кодировку файла UTF-8;
4) Далее, в кавычках, мы указываем имя исходного файла win1251.txt
5) Затем мы ставим знак > указывающий в какой файл нам сохранить результат перекодировки koi8r.txt

И в завершении, несколько полезных приемов использования программы iconv:

1. Находим все файлы в текущей директории с расширением *.html, перекодируем их в UTF-8 и результаты копирует в папку res

mkdir res
find -maxdepth 1 -iname  "*.html"  -type f -exec bash
-c "cat {} | iconv -c -f WINDOWS-1251 -t UTF-8> ./res/{}" \;

2. А что если требуется перекодировать все файлы “*.htm” рекурсивно? Тогда нам поможет следующий скрипт:

find . -name '*.htm' | while read i; do iconv -f  WINDOWS-1251 -t UTF-8 "$i" >tmp; mv tmp "$i"; done

или с помощью bash скрипта так (рекурсивно перекодируем все файлы “*.htm”):

#!/bin/sh
for i in `find . -name '*.htm' -type f`
    do
    echo $i
    iconv -f WINDOWS-1251 -t UTF-8 "$i" > tmp
    mv -f tmp "$i"
done
Оставить сообщение

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>