10

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

所以我需要一个比较功能。编写这样一个遍历 unicode 字符的函数很容易。(我碰巧在使用GLib,所以我会迭代g_utf8_next_char并比较 的返回值g_utf8_next_char。)

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

但也许我错过了什么?提前致谢。

4

1 回答 1

12

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

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

于 2013-08-20T08:08:12.903 回答