我在哪里可以开始使用C语言中的Unicode友好编程?

时间:2010-02-09 22:03:32

标签: c string unicode encoding unicode-string

所以,我正在开发一个普通的C(ANSI 9899:1999)项目,我正在试图弄清楚从哪里开始:Unicode,UTF-8和所有那些爵士乐。

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

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

任何链接,联机帮助页,维基百科文章,示例代码都非常受欢迎。我还会尝试在原始问题中维护此类资源的列表,以供稍后发生的任何人使用。


3 个答案:

答案 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等)都可以正常工作。

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