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

Проблема кодировки текстового файла всегда была и насколько я понимаю будет еще долго. В винде используется стандарт – 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 и отравляю.

Leave a Reply