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

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

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

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

- Начал с популярной программы BBE­dit и также ее бесплатным аналогом Tex­tWran­gler. Пользовал довольно долго — но после последнего обновления избавился как от страшного сна. То что настройки сделаны просто через жопу, ftp и ssh клиенты мягко говоря странноваты — но после последнего апдейта посмотрел какие дополнительные символы вводит данный редактор при сохранение.… Короче отказался.

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

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

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

- Конечно использую встроеный в Leop­ard текстовый редактор TextE­dit. По умолчанию также открывает в 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 и отравляю.

No Comments

Leave a Reply