8

所以,我正在研究一个纯 C (ANSI 9899:1999) 项目,并试图找出从哪里开始 re:Unicode、UTF-8 和所有爵士乐。

具体来说,它是一个语言解释器项目,我有两个主要需要处理 Unicode 的地方:读取源文件(该语言表面上支持 Unicode 标识符等)和“字符串”对象。

我熟悉有关 Unicode、UTF-7/8/16/32 和 UCS-2/4 等等的所有明显基础知识……我主要是在寻找有用的、特定于 C 的(也就是说,请没有 C++ 或 C#,这是之前在 SO 上记录的所有内容)资源,关于我在 C 中实现 Unicode 友好的东西的“下一步”。

任何链接、手册页、维基百科文章、示例代码都非常受欢迎。我还将尝试在原始问题中维护此类资源的列表,以供以后遇到它的任何人使用。


4

3 回答 3

10

International Components for Unicode提供了一个可移植的 C 库来处理 unicode。这是他们对 ICU4C 的电梯宣传:

C 和 C++ 语言以及许多操作系统环境不提供对 Unicode 和符合标准的文本处理服务的完全支持。即使某些平台确实提供了良好的 Unicode 文本处理服务,可移植应用程序代码也无法使用它们。ICU4C 库填补了这一空白。ICU4C 为应用程序提供了一个开放、灵活、可移植的基础,用于满足其软件全球化需求。ICU4C 密切跟踪行业标准,包括 Unicode 和 CLDR(通用区域设置数据存储库)。

于 2010-02-09T22:07:26.660 回答
3

GLib有一些Unicode 函数,是一个非常轻量级的库。它与 ICU 提供的功能级别不同,但对于某些应用程序来说可能已经足够了。GLib 的其他特性也适用于可移植的 C 程序。

GTK+ 建立在 GLib 之上。GLib 提供了在应用程序中经常重复的基本算法语言结构。该库具有以下功能(此列表不是完整列表):

  • 对象和类型系统
  • 主循环
  • 动态加载模块(即插件)
  • 线程支持
  • 定时器支持
  • 内存分配器
  • 线程队列(同步和异步)
  • 列表(单链接、双链接、双端)
  • 哈希表
  • 数组
  • 树(N 元和二元平衡)
  • 字符串实用程序和字符集处理
  • 词法扫描器和 XML 解析器
  • Base64(编码和解码)
于 2010-02-09T22:45:55.110 回答
0

我认为一个有趣的问题是——你的字符串的规范内部格式应该是什么?两个明显的选择(至少对我来说)是

a) 普通 c 字符串中的 utf8 b) 无符号短数组中的 utf16

在之前的项目中,我一直选择 utf-8。为什么 ; 因为它是 C 世界中阻力最小的路径。您与之交互的所有内容(stdio、string.h 等)都可以正常工作。

接下来是-什么文件格式。这里的问题是它对您的用户可见(除非您为您的语言提供唯一的编辑器)。在这里我猜你必须拿走他们给你的东西并尝试通过窥视来猜测(字节顺序标记帮助)

于 2010-02-09T22:24:13.337 回答