JOE -> перекодировка файла

Пишу для себя, что б не забыть , так что можете не комментировать. :)

но может кому пригодится, разжую:

сразу оговорюсь - все эти действия приминительны для консоли.
в иксах есть gedit, который автоматически распознает кодировку файла.

Допустим у вас есть линукс-система и основная кодировка на ней, предположим UTF-8 (как у меня)
И вот вам надо позарез на этом компе считать файл в кодировке KOI8
Естественно вместо русских букв вы увидите кракозяблики :)

но есть выход из двух действий.

1. $ export LANG=ru_RU.KOI8
2. в настройках консоли сменить кодировку на кои8

теперь можно прочитать/редактировать файл любым редактором, например моим любимым joe

после того как закончили работать и сохранили файл возвращаете всё как было:
1. $ export LANG=ru_RU.UTF8
2. в настройках консоли сменить кодировку на UTF8

---------------------------------------------------------------
---------------------------------------------------------------

вариант конечно практичный, но не для меня, самого ленивого человека в мире :)
поэтому, я, как обычно, когда ко мне в гости приходит её величество Лень, решил автоматизировать этот процесс, что бы не выполнять кучу не нужных телодвижений :)

рабочий пример покажу для joe.
для любого другого редактора или просмотрщика, например less , cat, или vi, всё то же самое

итак.
в домашней папке в файле .bashrc (и/или .profile - зависит от операционной системы) прописываем алиас
alias joe='~/joe.sh'

теперь в этой же папке создаем файл joe.sh и заполняем его ниже приведенными строчками:

#!/bin/bash
if [ "$1" == "koi8" ] && [ "$2" != "" ]; then

/bin/cp $2 $2.origcharset
/usr/bin/iconv -f koi8-r -t utf8 -o $2 $2.origcharset
/usr/bin/joe $2
/bin/mv $2 $2.iconv
/usr/bin/iconv -t koi8-r -f utf8 -o $2 $2.iconv
/bin/rm $2.iconv

elif [ "$1" == "koi8" ] && ["$2" == ""]; then

echo "usage: joe koi8 "

else

/usr/bin/joe $1 $2

fi

сохраняем файл.
перезаходим в консоль.
всё. :)
теперь по команде
$ joe file.txt

откроется исходный файл

а по команде
$ joe koi8 file.txt

откроется файл, перекодированный из koi8r в utf8
просле окончания работы с файлом он обратно перекодируется из utf8 в koi8r
и оставит на всяк случай оригинальную копию файла file.txt.origcharset

---
вот собственно и всё.
естественно этот скрипт можно использовать не только для joe, но и для других консольных просмотрщиков/редакторов.
а также при минимальном дополнении скрипта, можно сделать перекодировку из любой кодировки в любую кодировку :)

---
Удачи!

ЗЫ: ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ
ЗЫ 2: joe.sh.txt - полностью доведенный до ума скрипт.
в скрипте в первых строчках задаете переменные:

PROG_PATH='/usr/bin/joe' # полный путь к программе редактирования/просмотра
REWRITE_FILE='1' # если этот скрипт для программы просмотра, например для less, то значение переменной ставим в "0"
CHARSET_TO='utf8' # дефолтная кодировка на вашем компьютере

вот собственно и вся настройка.
при первом запуске скрипт создает каталог /tmp/translate/ , в котором будут храниться все обрабатываемые, обработанные и оригинальные файлы
это сделано для нормального одновременного доступа к вызываемому файлу
файлы именуются примерно так:
..home..sanek..test.txt , где .. - это замена слэшу. т.е. оригинальный файл test.txt лежит в директории /home/sanek/
скрипт умеет перекодировать из KOI8 и CP1251, но вы можете легко добавить необходимые кодировки в строчках:

#-------------------- detect charset
CHARSET_FROM=''
case $1 in
'koi8') CHARSET_FROM='koi8-r'
;;
'win') CHARSET_FROM='cp1251'
;;
*) usage
;;
esac

ну и само собой скрипт имеет кучу проверок на пермишины и в случае чего завершит выполнение с описанием ошибки

Прикрепленный файлРазмер
joe.sh.txt2.45 кб