Unix4Me
8Sep/080

Изменение кодировки текстового файла

Проблема кодировки текстового файла всегда была и насколько я понимаю будет еще долго. В винде используется стандарт - windows-1251(cp-1251), в большинстве юниксовых систем - koi8-r, в линуксовых системах, как правило - utf-8. В системе MacOS, как вы знаете, используется utf-8.

Когда работал в винде - использовал замечательную программу SkimEdit. В WinXP - можно заменить (в настройках эта опция есть) стандартный блокнот этой прогой - тогда как в WinVista не советовал Вам этого делать - больше WinVista не загрузится корректно.

Но вот я перешел на MacOS и понял что на этой системе чтение текста в кодировки отличной от стандартной (utf-8) - настоящая проблема. Начал эксперименты с программами:

- Начал с популярной программы BBEdit и также ее бесплатным аналогом TextWrangler. Пользовал довольно долго - но после последнего обновления избавился как от страшного сна. То что настройки сделаны просто через жопу, ftp и ssh клиенты мягко говоря странноваты - но после последнего апдейта посмотрел какие дополнительные символы вводит данный редактор при сохранение.... Короче отказался.

- Далее увидел графическую интерпретацию моего любимого терминального редактора vim - Macvim. Программа понравилась очень (живет до сих пор на компе). Куча приятных вещей: спокойно подхватила мой .vimrc из домашней директории, работает быстро, бесплатна и естественно все плюсы терминально vim'а. Но не совсем удобно открывать большие текстовые файлы (50-100 МБайт).

- Попробовал замечательную программу Coda. Удобна для работы через ftp и ssh, удобная настройка, приятно удаленно работать, как со своим сайтом, так и править скрипты. Таким образом программа оставила самые положительные эмоции - но опять же начинает жутко долго открывать текстовые файлы размером более 5 МБайт.

- Попробовал программу TextMate. Программа просто замечательная: работает бысто, гибкая в настройке, открывает файлы больших размеров просто моментально, куча мелких удобств. И опять минус - работает ТОЛЬКО с utf-8.

- Конечно использую встроеный в Leopard текстовый редактор TextEdit. По умолчанию также открывает в utf-8, но при желании открывает и в других кодировках.

Далее подумал - может быть не пытаться открыть файл в другой кодировки, а перевести принудительно все текстовые фалы в utf-8. После некоторых раздумий решил написать скрипт для перевода файлов находящихся в нужной директории в кодировку utf-8. Сразу скажу спасибо статье - позволила съэкономит массу времени. Вот собственно скрипт:

#!/bin/bash
#
#
if [ -z "$1" ]
then
echo 'Change encodings in /ПутьКПапкеПоУмолчанию/';
find "/ПутьКПапкеПоУмолчанию/" -name "*.txt" | while read i; do iconv -f windows-1251 -t utf-8 "$i" >tmp; mv tmp "$i"; chmod 644 "$i"; done
exit 1;
else
echo 'Change encodings in' $1;
find "$1" -name "*.txt" | while read i; do iconv -f windows-1251 -t utf-8 "$i" >tmp; mv tmp "$i"; chmod 644 "$i"; done
fi

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

Естественно если заменить windows-1251 на koi8-r будет происходить перекодирование из koi8-r в utf-8. Чтобы узнать все типы кодировок которые использует приложение iconv необходимо в терминале дать команду:

iconv -l

Далее - сохранил данный скрипт в файл с расширение .sh, в настройках сделал файл запускаемым и назначил открытие по умолчанию данного типа файлов программой Terminal.

Вот и все - теперь при необходимости перевожу нужные текстовые файлы в utf-8 и работаю с ними. Если необходимо отправлять файл пользователям винды - тем же скриптом (толька меняю местами utf-8 и windows-1251) перекодирую в windows-1251 и отравляю.

Comments (0) Trackbacks (0)

No comments yet.


Leave a comment

You must be logged in to post a comment.

No trackbacks yet.