среда, 12 ноября 2008 г.

Кодировки в текстовых файлах.

Коротенькая заметка по конвертированию текстовых файлов в utf8 в качестве памятки.

Доставшееся виндовое наследие в виде каких-то заметок, записок, рецептов, стихов и прочих текстовых документиков долго не давало мне покоя, из-за того, что хранилось оно в кодировке CP1251.
Чтобы спать спокойно, нужно все это перевести в utf8. Желательно легко, быстро и все сразу. Такой способ есть. Для этого нам понадобится программа enconv, входящая в пакет enca. Работать с ней до безобразия просто. Команда

enconv zametki.txt

автоматически определяет кодировку файла и конвертирует в родную кодировку локали с перезаписью файла.
Соответственно, чтобы сконвертировать все разом, нужно скомандовать примерно следующее:

find /home/user/ -name "*.txt" |enconv

и все станет великолепно. Файлы которые уже в utf8, enconv не трогает, они остаются без изменений.

Но все равно остается шанс столкнуться с файлом в ненавистной cp1251. С этим можно бороться двумя способами.
1. Поставить leafpad. Никаких особых достоинств типа подсветки синтаксиса или автодополнения кода у него нет, но зато он замечательно автоматически определяет кодировку файла и отображает его в читаемом виде. К тому же он достаточно легкий и быстрый.
2. Можно допилить стандартный гномовский gedit по инструкции, посоветованной мне товарищем Cucumber. Я попробовал, у меня все заработало.
Огромное спасибо коментаторам, с их подачи пост был практически полностью переписан.

12 комментариев:

vanoc комментирует...

спасибо за leafpad

Cucumber комментирует...

Хотите вы этого или нет, но документы с win1251 все равно будут встречаться. Я подправил gedit и теперь он корректно открывает такие документы. Как это сделать написано http://www.openkazan.info/gedit_windows-1251_utf8

antage комментирует...

А почему recode, а не iconv?

vanoc комментирует...

2Cucumber. не способ. тогда все файлы в utf кодировке с русскими символами отображаются кракозябрами. вот если бы гедит налету распознавал кодировку как leafpad ...

skarrok комментирует...

Зачем нужен recode, когда есть iconv?

jetxee комментирует...

2cucumber: полезная ссылка, спасибо!

2triklozoid: а я обычно konwert ставлю, у него командная строка самая короткая получается и он умеет делать автоопределение (any/ru):

$ echo молоко | iconv -f UTF-8 -t KOI8-R | konwert any/ru-utf8

stanislav комментирует...

Неплохой вариант с автоопределением кодировки - http://dstrsblog.blogspot.com/2008/03/kate.html

Denis Evsyukov комментирует...

А почему не поставить пакет enca и затем попробовать просто enconv file? Если не ковертирует автоматом, тогда уже использовать ключи... Проще по любому...

triklozoid комментирует...

Даже не ожидал, что будет столько отзывов. Приятно удивлён.

2 vanoc
спасибо за leafpad
Пожалуйста. Я в свою очередь могу сказать спасибо дистрибутиву ALTLinux Compact, там он стоял редактором по умолчанию..

2 cucumber
Хотите вы этого или нет, но документы с win1251 все равно будут встречаться.
Я не сомневаюсь, поэтому поставил leafpad.
Я подправил gedit ...
Сходил по ссылке, попробовал, все работает. Спасибо, дополню пост.

2 savagex & skarrok &
recode сразу перезаписывает файл, а iconv как и konwert направляет результат в стандартный вывод.

2 stanislav
Неплохой вариант с автоопределением кодировки - http://dstrsblog.blogspot.com/2008/03/kate.html
Спасибо за комментарий, просто я kate не использую, поэтому вряд ли пригодится.

2 Juev
А почему не поставить пакет enca..
Спасибо, попробовал, действительно работает, классная вещь.

stanislav комментирует...

> я kate не использую, поэтому вряд ли пригодится

по идее можно к любому другому редактору прицепить, который принимает параметр с кодировкой

stanislav комментирует...

Кстати, в KDE4 kwrite умеет определять кодировку при открытии, выставляется в опциях. Очень приятный плюс.

Unknown комментирует...

ОПХБЕР!