在 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/