所以,我正在开发一个普通的C(ANSI 9899:1999)项目,我正在试图弄清楚从哪里开始:Unicode,UTF-8和所有那些爵士乐。
具体来说,它是一个语言解释器项目,我有两个主要的地方,我需要处理Unicode:读取源文件(表面上支持Unicode标识符的语言等),以及'字符串'对象。
我熟悉所有关于Unicode的明显基础知识,UTF-7/8/16/32& UCS-2/4,等等......我主要是寻找有用的,特定于C的(也就是说,请不要使用C ++或C#,这是之前在SO上记录的所有内容)资源,我的'下一个在C中实现Unicode友好的东西的步骤。
任何链接,联机帮助页,维基百科文章,示例代码都非常受欢迎。我还会尝试在原始问题中维护此类资源的列表,以供稍后发生的任何人使用。
man 3 iconv
(以及iconv_open
和iconvctl
)libbasekit
,似乎包含轻量级Unicode处理工具答案 0 :(得分:10)
International Components for Unicode提供了一个用于处理unicode的可移植C库。这是ICU4C的电梯间距:
C和C ++语言以及许多操作系统环境不能完全支持Unicode和符合标准的文本处理服务。尽管某些平台确实提供了良好的Unicode文本处理服务,但便携式应用程序代码无法使用它们。 ICU4C图书馆填补了这一空白。 ICU4C为应用程序提供了一个开放,灵活,可移植的基础,用于满足其软件全球化要求。 ICU4C密切跟踪行业标准,包括Unicode和CLDR(通用区域数据存储库)。
答案 1 :(得分:3)
GLib有一些Unicode functions,是一个非常轻量级的库。它并不接近ICU提供的功能级别,但对某些应用程序来说可能已经足够了。 GLib的其他功能也适用于便携式C程序。
GTK +建立在GLib之上。 GLib提供了通常在应用程序中复制的基本算法语言结构。该库具有诸如此列出的功能(此列表不是一个全面的列表):
- 对象和类型系统
- 主循环
- 模块的动态加载(即插件)
- 线程支持
- 计时器支持
- 内存分配器
- 线程队列(同步和异步)
- 列表(单链接,双链接,双端)
- 哈希表
- 阵列
- 树木(N元和二元平衡)
- 字符串实用程序和字符集处理
- 词法扫描程序和XML解析器
- Base64(编码和解码)
答案 2 :(得分:0)
我认为其中一个有趣的问题是 - 字符串的规范内部格式应该是什么?两个明显的选择(至少对我来说)是
a)utf8 in vanilla c-strings b)无符号短阵列中的utf16
在之前的项目中,我总是选择utf-8。为什么因为它是C世界中阻力最小的路径。你正在接口的所有东西(stdio,string.h等)都可以正常工作。
接下来 - 什么文件格式。这里的问题是它对您的用户可见(除非您为您的语言提供唯一的编辑器)。在这里,我猜你必须拿走他们给你的东西并尝试通过偷看来猜测(字节顺序标记帮助)