c - strcmp 会按代码点顺序比较 utf-8 字符串吗?

标签 c unicode utf-8 glib

在 C 程序中,我想按 Unicode 代码点顺序对有效 UTF-8 编码字符串列表进行排序。没有整理,没有语言环境意识。

所以我需要一个比较函数。编写这样一个遍历 unicode 字符的函数很容易。 (我恰好在使用 GLib ,所以我将使用 g_utf8_next_char 进行迭代并比较 g_utf8_next_char 的返回值。)

但出于好奇和可能的简单性和效率,我想知道的是:一个简单的字节对字节 strcmp(或 g_strcmp)实际上会做吗同一份工作?我认为它应该,因为 UTF-8 encodes首先是最高有效位,需要以 N+1 字节编码的代码点将比需要以 N 字节编码的代码点具有更大的初始字节。

但也许我遗漏了什么?提前致谢。

最佳答案

是的,UTF-8 保留代码点顺序,因此您可以只使用 strcmp。这是 UTF-8 的(许多)优点之一。

需要注意的是,Unicode 中的 codepoints 是 UTF-32 值,一些谈论按“codepoint”顺序整理 Unicode 字符串的人实际上错误地使用了“codepoint”一词来表示“UTF” -16 代码单元”。如果您希望顺序匹配 UTF-16 代码单元排序规则,则需要做更多的工作。

关于c - strcmp 会按代码点顺序比较 utf-8 字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18329781/

相关文章:

c - 关于c中的rand()

c - 替换 C 中的字符

regex - Vim 正则表达式匹配 unicode 字符作为非单词

python - Unicode 字典键问题

c++ - 如何转换 UTF-8 <-> UTF16 便携

Python——字符编码和解码问题

我们可以有一个可变长度数组类型的结构元素吗?

c++ - 在c库的回调函数中调用c++对象

user-interface - 用户界面有哪些好的字体?那么Unicode呢?

python - Django 和 lxml 中的解码问题