Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
strcmp会按代码点顺序比较utf-8字符串吗?_C_Unicode_Utf 8_Glib - Fatal编程技术网

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

strcmp会按代码点顺序比较utf-8字符串吗?,c,unicode,utf-8,glib,C,Unicode,Utf 8,Glib,在C程序中,我想按Unicode代码点顺序对有效的UTF-8编码字符串列表进行排序。没有排序规则,没有区域设置意识 所以我需要一个比较函数。编写这样一个迭代unicode字符的函数非常简单。(我碰巧正在使用,所以我会使用g\u utf8\u next\u char进行迭代,并比较g\u utf8\u next\u char的返回值) 但出于好奇和可能的简单和高效,我想知道的是:一个简单的字节对字节的strcmp(或g_strcmp)真的会做同样的工作吗?我认为应该是这样的,因为UTF-8首先是最

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

所以我需要一个比较函数。编写这样一个迭代unicode字符的函数非常简单。(我碰巧正在使用,所以我会使用
g\u utf8\u next\u char
进行迭代,并比较
g\u utf8\u next\u char
的返回值)

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


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

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


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

非常感谢!我正要跟进我的用例以及我不认为该警告适用的原因,然后我看到我正在尝试实现的内容中有这样的信息:“字典比较,它按字母顺序从最小到最大排序字符串,是基于UCS代码点值的,这相当于基于UTF-8的字典排序。”
:-)