[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: CP1251 to KOI8-R text conversion



On 2003.02.17 at 22:14:34 +0200, Andrei Sosnin wrote:

> Здравствуйте!
> 
> У меня такая проблема: необходимо перевести документ в кодировке cp-1251 
> или utf-8 в кодировку koi8-r. Обрыв результирующего текста недопустим, 
> однако допустимыми являются либо потеря "запрещенных" символов (заменой 
> вопросами, например), либо замена специальных символов в т.н. "entity" 
> HTML/XML (например: §, или ä или è).
> 
> *iconv* в простом режиме, как известно обрывает текст, с опцией -c 
> результат иногда практически тот же, иногда - "проживает" до конца... 
> (особенно, если в промежутке перекодировать cp1251 -> utf-8). Мне же 
> необходим простой и *эффективный* метод...
> 
> Существует ли в Дебиане программа, удовлетворяющая моим запросам? Если 
> нет, то может ли кто-нибудь дать мне рекоммендации по тому, как мне 
> написать соответствующую программку на С/С++ или Питоне? Именно: где 
> можно найти таблицу символов Юникод с их кодами (которые можно 
> использовать хотя бы в "энтити" вроде: ŗ)?

Примерно эту функциональность реализует catdoc. Правда, при обработке
не-вордовых файлов он отжирает первые 8 символов, а я все никак не
соберусь это пофиксить. Зато возможные замены описываются в текстовом
файлике.

Кроме того, стоит посмотреть на системы перекодировки, встроенные в perl
5.8 , tcl>= 8.1 или python 2.x.

Вообще, программа перекодировки с использованием C-шной функции iconv
(в отличие от утилиты iconv) которая корректно обрабатывает
отсутствующие в выходной кодирвоке символы, должна занять строчек 100 из
которых большая часть будет посвящена чтению файла подстановок и
построению эффективной структуры данных для поиска в нем.

На perl 5.8 мне удалось уложиться в экран. Думаю, что на python возможно
примерно то же самое.





-- 
Victor Wagner			vitus@ice.ru
Chief Technical Officer		Office:7-(095)-748-53-88
Communiware.Net 		Home: 7-(095)-135-46-61
http://www.communiware.net      http://www.ice.ru/~vitus



Reply to: