我可以从哪里开始使用 C 进行 Unicode 友好的编程?
因此,我正在开发一个 plain-C (ANSI 9899:1999) 项目,并试图找出从哪里开始:Unicode、UTF-8 和所有这些爵士乐。
具体来说,这是一个语言解释器项目,我有两个主要位置需要处理 Unicode:读取源文件(该语言表面上支持 Unicode 标识符等)和“字符串”对象。
我熟悉有关 Unicode、UTF-7/8/16/32 和 UTF-7 的所有明显基础知识。 UCS-2/4,依此类推……我主要是在寻找有用的、特定于 C 的资源(也就是说,请不要使用 C++ 或 C#,这是之前在此处记录的所有内容)资源作为我的“下一个”步骤'来实现 Unicode 友好的东西......在 C 中。
任何链接、手册页、维基百科文章、示例代码都非常受欢迎。我还将尝试在原始问题中保留此类资源的列表,供以后遇到该问题的任何人使用。
- 如果您不熟悉 Unicode 以及编码的实际含义,在考虑其他内容之前必须阅读:http://www.joelonsoftware.com/articles/Unicode.html
- UTF-8 主页:http://www.utf-8.com/
-
man 3 iconv
(以及iconv_open
和iconvctl
) - Unicode 国际组件 (通过杰夫·里迪)
-
libbasekit
,其中似乎包含轻型 Unicode 处理工具 - Glib 有一些 Unicode 函数
- 基本的 UTF-8 检测器 函数,作者:Christoph
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Unicode 国际组件 提供了一个用于处理 unicode 的可移植 C 库。以下是他们对 ICU4C 的电梯宣传:
International Components for Unicode provides a portable C library for handling unicode. Here's their elevator pitch for ICU4C:
GLib 有一些 Unicode 函数,是一个非常轻量级的库。它与 ICU 提供的功能水平不相近,但对于某些应用程序来说可能已经足够了。 GLib 的其他功能对于可移植 C 程序也很有用。
GLib has some Unicode functions and is a pretty lightweight library. It's not near the same level of functionality that ICU provides, but it might be good enough for some applications. The other features of GLib are good to have for portable C programs too.
我认为有趣的问题之一是 - 字符串的规范内部格式应该是什么?两个明显的选择(至少对我来说)是
a) 普通 C 字符串中的 utf8
b) 无符号短数组中的 utf16
在之前的项目中我一直选择 utf-8。为什么 ;因为这是 C 世界中阻力最小的路径。您所连接的所有内容(stdio、string.h 等)都会正常工作。
接下来是 - 什么文件格式。这里的问题是它对您的用户可见(除非您为您的语言提供唯一的编辑器)。在这里我想你必须接受他们给你的东西并尝试通过偷看来猜测(字节顺序标记有帮助)
I think one of the interesting questions is - what should your canonical internal format for strings be? The 2 obvious choices (to me at least) are
a) utf8 in vanilla c-strings
b) utf16 in unsigned short arrays
In previous projects I have always chosen utf-8. Why ; because its the path of least resistance in the C world. Everything you are interfacing with (stdio, string.h etc) will work fine.
Next comes - what file format. The problem here is that its visible to your users (unless you provide the only editor for your language). Here I guess you have to take what they give you and try to guess by peeking (byte order marks help)