【问题标题】:Will strcmp compare utf-8 strings in code point order?strcmp 会按代码点顺序比较 utf-8 字符串吗?
【发布时间】:2013-08-22 04:38:11
【问题描述】:

在 C 程序中,我想按 Unicode 代码点顺序对有效的 UTF-8 编码字符串列表进行排序。没有排序规则,没有区域感知。

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

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

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

【问题讨论】:

    标签: c unicode utf-8 glib


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢!我正要跟进我的用例以及我认为警告不适用的情况,然后在the standard 中看到此信息我正在尝试实现:“字典比较,它从最少的顺序排列字符串最大字母顺序是基于 UCS 代码点值,这相当于基于 UTF-8 的字典顺序。” :-)
    猜你喜欢
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多