2010-02-09 62 views
8

因此,我正在开发一个纯C(ANSI 9899:1999)项目,并试图找出重新开始的地方:Unicode,UTF-8和所有爵士乐。我在哪里可以开始使用C语言中的Unicode编程?

具体来说,它是一个语言解释器项目,我有两个主要的位置,我需要处理Unicode:在源文件中读取(该语言表面上支持Unicode标识符等)以及'string'对象中。我很熟悉所有关于Unicode,UTF-7/8/16/32 & UCS-2/4的所有明显的基础知识,等等......我主要是在寻找有用的,特定于C的(也就是说,请不要使用C++或C#,这是以前在SO上记录的所有内容)资源,对于我的'下一步'来实现Unicode友好的内容...在C.

任何链接,manpages,维基百科文章,示例代码,都非常受欢迎。我还会尝试在原始问题中保留这些资源的列表,以供任何稍后发生的人员使用。


+0

1为的iconv,只要它是可用的。在Windows上icu可能是一个更好的选择 – 2010-02-09 22:54:11

回答

10

International Components for Unicode提供了用于处理的unicode便携式C库。这里是他们的ICU4C的电梯间距:

C和C++语言和许多操作系统环境不提供对Unicode和符合标准的文本处理服务的完全支持。尽管有些平台确实提供了很好的Unicode文本处理服务,但便携式应用程序代码无法使用它们。 ICU4C库填补了这一空白。 ICU4C为应用软件全球化要求提供了一个开放,灵活,便携的基础。 ICU4C密切关注行业标准,包括Unicode和CLDR(通用语言环境数据存储库)。

+0

我听说过这个(我认为Joel在我添加到第一篇文章中的链接中提到过它)......我害怕触摸任何IBM,但它们似乎趋向于单片软件。我更多地寻找stdlib-C的东西,技巧等,比图书馆...我试图让我的依赖关系真正为这个项目轻。也就是说,我会将它们添加到原始帖子中,它们可能对其他人有用。 *重症监护病房有多重?也许如果他们真的很轻松/简单,那就值得我的时间...... – ELLIOTTCABLE 2010-02-09 22:08:52

+0

ICU是Unicode处理中的非微软行业标准 - 无需赘肉。虽然学习曲线是陡峭的。顺便说一句 - 如果你只对运输和表示Unicode感兴趣,那么你不需要ICU。 ICU与Unicode一起工作。 – 2010-02-09 22:14:15

+1

具体来说,我认为在这个特殊时刻,我需要做的最少工作是读入(至少)UTF-8/ASCII文件,并将它们转换为内部的,标记化的UTF-32'字符串'表示。我可以轻松( - )做这个*没有* ICU,或用更轻的东西? – ELLIOTTCABLE 2010-02-09 22:22:14

0

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

一)香草C字符串UTF8 B)UTF16在无符号短数组

在以前的项目中,我都选择了UTF8。为什么;因为它是C世界中阻力最小的路径。你所有的接口(stdio,string.h等)都可以正常工作。

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

3

GLib有一些Unicode functions并且是一个非常轻量级的库。它与ICU提供的功能不相同,但对某些应用程序来说可能已足够好。 GLib的其他功能也适用于便携式C程序。

GTK +建立在GLib之上。 GLib提供了通常在应用程序中复制的基本算法语言结构。这图书馆的功能,如(这个列表是不是一个完整列表):

  • 对象和类型系统
  • 主回路
  • 模块动态加载(即插件)
  • 线程支持
  • 定时器支持
  • 内存分配器
  • 螺纹队列(同步和异步)
  • 名列表(单链表,双向链表,双端)
  • 哈希表
  • 阵列
  • 树(N进制和二进制平衡)
  • 字符串工具和charset处理
  • 词汇扫描器和XML解析器
  • 的Base64(编码解码&)
相关问题