Где я могу начать с Unicode-дружественного программирования в C? - PullRequest
8 голосов
/ 10 февраля 2010

Итак, я работаю над проектом на простом C (ANSI 9899: 1999) и пытаюсь понять, с чего начать: Unicode, UTF-8 и весь этот джаз.

В частности, это проект интерпретатора языка, и у меня есть два основных места, где мне нужно будет обрабатывать Unicode: чтение в исходных файлах (язык якобы поддерживает идентификаторы Unicode и т. Д.) И в объектах 'string'.

Я знаком со всеми очевидными основами, касающимися Unicode, UTF-7/8/16/32 и UCS-2/4, и т. Д. И т. Д. Я в основном ищу полезные, специфичные для C (которые пожалуйста, не используйте C ++ или C #, это все, что было задокументировано здесь на SO ранее) ресурсы относительно моих «следующих шагов» для реализации Unicode-дружественных вещей… в C.

Любые ссылки, справочные страницы, статьи в Википедии, примеры кода, приветствуются. Я также постараюсь вести список таких ресурсов здесь, в оригинальном вопросе, для всех, кто сталкивается с этим позже.


Ответы [ 3 ]

10 голосов
/ 10 февраля 2010

Международные компоненты для Unicode предоставляет переносимую библиотеку C для обработки Unicode. Вот их высота лифта для ICU4C:

Языки C и C ++ и многие среды операционных систем не обеспечивают полной поддержки Unicode и служб обработки текста, соответствующих стандартам. Несмотря на то, что некоторые платформы предоставляют хорошие сервисы обработки текста в Юникоде, код переносимого приложения не может их использовать. Библиотеки ICU4C заполняют этот пробел. ICU4C обеспечивает открытую, гибкую, портативную основу для приложений, которые можно использовать для удовлетворения своих требований к глобализации программного обеспечения. ICU4C внимательно следит за отраслевыми стандартами, включая Unicode и CLDR (репозиторий общих локалей).

3 голосов
/ 10 февраля 2010

GLib имеет некоторые функции Unicode и представляет собой довольно легкую библиотеку. Он не соответствует уровню функциональности, который обеспечивает ICU, но может быть достаточно для некоторых приложений. Другие возможности GLib хороши и для переносимых программ на Си.

GTK + построен поверх GLib. GLib предоставляет фундаментальные алгоритмические языковые конструкции, которые обычно дублируются в приложениях. Эта библиотека имеет такие функции, как (этот список не является полным списком):

  • Объект и система типов
  • Основной цикл
  • Динамическая загрузка модулей (т.е. плагинов)
  • Поддержка потоков
  • Поддержка таймера
  • Распределитель памяти
  • Потоковые очереди (синхронные и асинхронные)
  • Списки (односвязные, двусвязные, двухсторонние)
  • Хеш-таблицы
  • Массивы
  • Деревья (N-арные и бинарные сбалансированные)
  • Строковые утилиты и обработка charset
  • Лексический сканер и анализатор XML
  • Base64 (кодирование и декодирование)
0 голосов
/ 10 февраля 2010

Мне кажется, один из интересных вопросов - каким должен быть ваш канонический внутренний формат для строк? 2 очевидных варианта (по крайней мере для меня):

а) utf8 в ванильных струнах б) utf16 в беззнаковых коротких массивах

В предыдущих проектах я всегда выбирал utf-8. Зачем ; потому что это путь наименьшего сопротивления в мире C. Все, с чем вы взаимодействуете (stdio, string.h и т. Д.), Будет работать нормально.

Далее идет - какой формат файла. Проблема здесь в том, что он виден вашим пользователям (если вы не предоставите единственный редактор для вашего языка). Здесь, я думаю, вы должны взять то, что они вам дают, и попытаться угадать, посмотрев (пометки в порядке следования байтов)

...