我可以从哪里开始使用 C 进行 Unicode 友好的编程?

发布于 2024-08-21 00:50:35 字数 1510 浏览 5 评论 0 原文

因此,我正在开发一个 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 中。

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


So, I’m working on a plain-C (ANSI 9899:1999) project, and am trying to figure out where to get started re: Unicode, UTF-8, and all that jazz.

Specifically, it’s a language interpreter project, and I have two primary places where I’ll need to handle Unicode: reading in source files (the language ostensibly supports Unicode identifiers and such), and in ‘string’ objects.

I’m familiar with all the obvious basics about Unicode, UTF-7/8/16/32 & UCS-2/4, so on and so forth… I’m mostly looking for useful, C-specific (that is, please no C++ or C#, which is all that’s been documented here on SO previously) resources as to my ‘next steps’ to implement Unicode-friendly stuff… in C.

Any links, manpages, Wikipedia articles, example code, is all extremely welcome. I’ll also try to maintain a list of such resources here in the original question, for anybody who happens across it later.


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

北座城市 2024-08-28 00:50:35

Unicode 国际组件 提供了一个用于处理 unicode 的可移植 C 库。以下是他们对 ICU4C 的电梯宣传:

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

International Components for Unicode provides a portable C library for handling unicode. Here's their elevator pitch for ICU4C:

The C and C++ languages and many operating system environments do not provide full support for Unicode and standards-compliant text handling services. Even though some platforms do provide good Unicode text handling services, portable application code can not make use of them. The ICU4C libraries fills in this gap. ICU4C provides an open, flexible, portable foundation for applications to use for their software globalization requirements. ICU4C closely tracks industry standards, including Unicode and CLDR (Common Locale Data Repository).

冷︶言冷语的世界 2024-08-28 00:50:35

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

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

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

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.

GTK+ is built on top of GLib. GLib provides the fundamental algorithmic language constructs commonly duplicated in applications. This library has features such as (this list is not a comprehensive list):

  • Object and type system
  • Main loop
  • Dynamic loading of modules (i.e. plug-ins)
  • Thread support
  • Timer support
  • Memory allocator
  • Threaded Queues (synchronous and asynchronous)
  • Lists (singly linked, doubly linked, double ended)
  • Hash tables
  • Arrays
  • Trees (N-ary and binary balanced)
  • String utilities and charset handling
  • Lexical scanner and XML parser
  • Base64 (encoding & decoding)
小嗷兮 2024-08-28 00:50:35

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

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)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文