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: