Thu, 17 May  |   Login English version  |  OS2.Ru  
В начало
Об OS/2
Новости
Публикации
DevCenter
База данных
Каталог ресурсов
Биржа труда
TeamDB
Форумы и общение
Опросы и конкурсы
Russian Team OS/2
На первую страницу OS2.Ru
 Вокруг OS/2 |  Программы и технологии |  Аппаратура |  Разработчикам |  Мастерская
Поиск по: Добавить закладку OS2.Ru в панель Netscape 6/Mozilla
OS2.Ru > Articles > Dev > Prog > Convert
2001-09-10
Sergey
(версия для печати)

Работа с кодовыми страницами стандартными средствами OS/2

Небольшое вступление

Насколько известно на разных компьютерных платформах, да и даже в разных операционных системах, применяются различные кодировки символов. Для России их аж несколько: KOI8-R, Windows-1251, IBM-866, ISO8859-5 -- самые известные! Есть также кодировка для Apple, Cyrillic-EBCDIC и наконец какая-то IBM-855 (просто Cyrillic). Естественно, что надо как-то передавать данные между различными платформами, что приводит к необходимости иметь какую-то систему перекодировки между всеми этими кодовыми страницами.

Положение ещё усугубялется тем, что в некоторых раcпределённых сетевых программах (особенно это касается творений гениев программирования для Windows, например ICQ) используется только кодировка Windows-1251 . Как показывает практика, битва за обучение Windows методам перекодировки результатов не приносят.

Пользователи OS/2 (как наиболее умудрённые опытом в борьбе с Windows), отличающиеся инициативностью, изобрели некое средство, названное dcplus (из проекта DCPack).


Работаем с код.страницами стандартными средствами OS/2

Наверное когда-то DCplus было жизненно необходим, но в более поздних версия OS/2, по-моему начиная с 4-й, появилась встроенная система поддержки языковых извращений в виде дирректории \LANG в корне загрузочного диска. И, О ЧУДО, в её составе есть ВСЕ известные кодовые таблицы для русского языка. Но корпорация IBM отличается тем, что никогда ничего не делает на 100 процентов :) В этом случае тоже. Но не будь мы пользователями OS/2, если нам не удастся уломать IBM.

К счастью в последнем известном мне toolkit (набор ПО для разработки своих программ) IBM таки умудрилась преобразовать libc библиотеки, предоставляющие интерфейс к динамическому рантайму (\os2\dll\libc*), в формат понимаемый большинством линкеров. Этому уже была посвящена статья опубликованная на нашем сервере, и что возрадовало меня особо, IBM смогла таки поместить в эти библиотеки ссылку на чудесную функцию iconv. ОНА ДОЛЖНА СПАСТИ НАС (Подумал тут я)!

Описание этой функции находится в файле \os2tk45\book\xpg4ref.inf того самого набора юного программиста для OS/2.

Итак, зачем нам всякие dcplus и прочие штучки, если в OS/2 уже есть встроенный код, который неплохо работает, для перекодировки данных 'из' и' в' разные кодовые страницы страницы. Надеюсь вы уже скачали тулкит и ознакомились с вышеуказанным файлом, именно поэтому я не буду повторять здесь описание этой функции. Расскажу лишь о том, до чего вы, возможно, сами не догадаетесь (прошу прощения у догадавшихся :-).


Как оно устроено

Обратим взоры в сторону директории \LANG, особенно в ту её сторону которая называется \LANGUAGE\CODEPAGE. Если быть ещё более конкретным, нас интересует файл UCSTBL.LST . При просмотре этого файла (например <F3> в FC/2 или, например, type UCSTBL.LST |more) в самом начале мы видим следующие (или примерно таковые) строки:

#
# Name: ucstbl.lst
#
# Desciption: # This table gives the alias name for ULS codepage converters. # # The first column is user specified codepage name. # The second column is the actual codepage name. # # Copyright: # Copyright IBM Corp. 1996, 1998 # # Notes: # 1. All names must be ASCII-7 alphanumeric. # 2. Hyphens are ignored in both alias and actual name # 3. OS/2 searches this table case independent #

Это, как вы догадались, некий комментарий к этому файлу (по которому сразу видно, что фирма IBM выпускает ещё и Unix систему AIX). Краткий перевод:

"Эта таблица псевдонимов для перекодировщиков ULS (прим. пер. наверное ULS это "Универсальная Языковая Поддержка"). Первая колонка -- собственно псевдоним, придуманный пользователем. Вторая -- название действительной кодовой таблицы. (прим. пер. не, мне нравится стиль писавших эти комментарии! А ещё говорят, что у IBM плохая документация) Наши копирайты.
Примечания:
  1. Все имена должны состоять из 7-ми битных букво-цифр.
  2. Знаки "дефис" ("-") -- игнорируются для обеих колонок.
  3. OS/2 игнорирует регистр при просмотре этой таблицы."

Ниже идут строки с псевдонимами и названиями действительных кодовых страниц. Действительные кодовые страницы в понимании IBM, видимо, те, которые действуют у них. Для каждой такой страницы в этой поддиректории есть файл (буду рад если кто-нибудь пришлёт его формат) отражающий сущность этой страницы.


Использование

В качестве иллюстрации к статье прилагается пример использования этой функции на языке C. Данная программа читает данные из stdin, перекодирует их в соответствии с названиями кодовых страниц, указанных в качестве параметров, пишет в stdout и выводит ошибки в stderr (типа "мы любим Юникс").

У вас могут возникнуть некоторые проблемы с её компиляцией. Для их успешного разрешения вам понадобится-таки IBM OS/2 Toolkit ver 4.5. В нём есть файлы iconv.h libc*.lib. Советую также обратиться к статье "Про динамический рантайм" ибо реализация функции iconv существует только в виде DLLки.

PS. А ещё там есть функция nl_langinfo. Ну и всякие другие тоже есть ;-)

PPS. Большое спасибо Виталию Тимчишину, откомпилировшему пример.

Пример использования

  • текст примера использования ICONV на C
  • Исполняемый вариант примера


  • Обсудить материал (число отзывов:6)
    предыдущий материал  |  следующий материал


     Вокруг OS/2 |  Программы и технологии |  Аппаратура |  Разработчикам |  Мастерская


    Новости
    15/08: GoldenCode выпустит Java 1.4 для OS/2
    14/06: Fix #16 rus / Warp4
    30/05: Перерыв в работе OS2.Ru
    Все новости..

    В каталоге
    Дерево каталога
    Новые поступления

    Публикации
    Боремся с зависанием PM и зомби - WatchCat + HardKill
    (Samorukov Alex , 2001-10-11)

    DSync - куда может быть проще?
    (Okounkov Konstantin, 2001-09-28)

    WarpGoGo: переводим музыку в MP3
    (Okounkov Konstantin, 2001-09-26)

    Все материалы

    Решения
    Tips & tricks

    Активные опросы
    Используете ли Вы OS2.Ru tab в Netscape ?

    Все опросы
    Первая страница  |   Об OS/2  |   Новости  |   Публикации  |   База данных  |   Каталог ресурсов  |   Биржа труда  |   TeamDB  |   Форумы общения  |   Опросы и голосования  |   OS2.Ru DevCenter
    Дизайн, оформление © 1996-2000 Copyright WebTeam. Использование материалов OS2.Ru без согласия авторов и координаторов запрещено
    Powered by OS/2