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

Re: перекодировка



On Sun, 23 Jul 2000, Vlad Harchev wrote:

> 
>  Да, там на этом месте байт 0x85 (по-моему) - это HORIZONTAL ELISPIS в
> соотвествии с определением cp1251 заложенном в glibc, таковой символ отсутвует
> в кодировка koi8-r, поэтому iconv не может его перевести и отказывается идти
> дальше.
>  Во-первых, я не думаю что этот символ в приложенном файле имеет какой-то
> смысл - скорее глюк какой-то софтины (экспорта из экселя?).

Почему не имеет смысл? Многоточие оно вполне имеет смысл.

>  Во-вторых, было бы неплохо расширить возможности _утилиты_ iconv на предмет
> поведения в случае невозможности перевода - типа либо останов, либо пропуск
> символа, либо оставить как есть, либо замена чем-нить другим (типа пробела)
> либо перевод в mnemonic unicode (типа <horizontal-elipsis> в нашем случае).


Для большинства подобного рода символов существуют довольно приличные
замены на комбинации из нескольких символов. 

В свое время, когда я писал catdoc версии 0.90 я там предусмотрел подобную
ситуацию.

И в существующем дистрибутивном файле ascii.replchars horizontal ellipsis
заменяется именно на "..."

Точнее, у меня там используется трехуровневая замена
1. Смотрим есть ли данный unicode символ в таблице specchars
 (например "\" в случае если выходной формат TeX или "&" в случае HTML)
 Если нашли, то выводим заменитель из данной таблицы и идем на следующий
 unicode символ 
2. Пытаемся перекодировать в выходной charset. Если получилось, выводим
то, что получилось
3. Если шаг 2 был безуспешный, ищем в таблице заменителей (а в ней есть
много чего - корректная транслитерация всей кириллицы, отображение букв
latin 1 на буквы с порезанными умляутами etc, причем для каждого выходного
формата она своя, с учетом того, что те же TeX и HTML имеют специальные
управляющие последовательности для многих интересных printablе символов.
4. Если и это не спасло, то в зависимости от режима выводим либо
универсальный символ-заменитель (обычно "?") либо 16-ричный код данного
Unicode-символа.

Но чтобы обламываться и выпадать с ошибкой...

 --------------------------------------------------
Victor Wagner			vitus@ice.ru
Programmer			Office:7-(095)-785-09-72
Institute for Commerce 		Home: 7-(095)-135-46-61
Engineering                     http://www.ice.ru/~vitus



Reply to: