String Lua中的字符串排序

String Lua中的字符串排序,string,character-encoding,lua,String,Character Encoding,Lua,我正在阅读(是的,我知道它有点过时),在(关于关系运算符)中,作者说: 例如,在欧洲拉丁语-1语言环境中,我们有“acai”

我正在阅读(是的,我知道它有点过时),在(关于关系运算符)中,作者说:

例如,在欧洲拉丁语-1语言环境中,我们有“acai”<“açaí”<“acorde”

我不明白。对我来说,拥有
“acai”<“açaí”
是可以的,但为什么
“açaí”<“acorde”


AFAIK(),
“c”
,还是我错了?

在PiL第三版中,此声明已被修改:


例如,对于葡萄牙语拉丁语-1语言环境,我们有
“acai”您引用一个代码页,它将代码点映射到字符。当然,码点是一组有限的非负整数,是有序的、不同的实体。然而,这不是角色的意义所在

字符有顺序,这是一种偏序:字符可以“相等”,但不能相同。排序规则是一个用户价值的概念,它随语言环境(以及时间)的变化而变化

字符串甚至更复杂,因为某些字符集(例如Unicode)可以具有组合字符。允许将“字符”表示为单个字符或后跟组合字符的基本字符。例如,“ä”对“a¨”。由于它们代表相同的概念特征,因此应将它们视为比“ä”与“a”更平等的概念

在西班牙语中,“ch”、“rr”和“ll”过去是字母表中的字母,单词也按顺序排列;现在,它们不是,但“ñ”仍然是

类似地,在过去,讲英语的人将以“Mc”和“Mac”开头的姓氏排在以“M”开头的姓氏之后并不少见

软件库必须处理这些事情,因为这是用户想要的。谢天谢地,一些旧的约定已经不再使用了



因此,如果“c”与“ç”具有相同的排序顺序,但“i”在“ç”之前,则区域设置很可能具有排序规则,从而产生“acai”<“açaí”<“acorde”。这种情况看起来很奇怪,尽管这种可能性通常需要我们的代码来允许。

OK。这是事实,但不能解释这种行为。我的意思是,为什么
“acai”<“açaí”
“açaí”<“acorde”
?正如@Kamiccolo在一篇评论中指出的那样,使用strcoll()函数来比较字符串,因此在比较中,变音符号看起来可能不相关。@yu@stu
“açaí”<“acorde”
不是真的(如@YuHao所强调的)。事实上,我也相信这本书中有一个拼写错误。应该这样写:
“acai”我猜这是书中的一个错误。字符串排序是一个字母接一个字母的,所以
“acai”<“açaí”<“acorde”
相当于
“c”<“c”<“c”
,这是毫无意义的。当我读这本书的这一部分时,我想到了同样的事情,我有第三版。哪个是“欧洲拉丁语1语言环境”?有很多。。。
print("acai" < "açaí")
print("açaí" < "acorde")

print(os.setlocale("pt_PT"))

print("acai" < "açaí")
print("açaí" < "acorde")