Где я могу начать с программирования на C, ориентированного на Юникод?

StackOverflow https://stackoverflow.com/questions/2232861

Вопрос

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

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

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

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


Это было полезно?

Решение

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

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

Другие советы

GLib есть некоторые Функции Юникод и это довольно легкая библиотека.Это не тот уровень функциональности, который обеспечивает ICU, но для некоторых приложений этого может быть достаточно.Другие возможности GLib полезны и для портативных программ на языке C.

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top