我正在阅读Programming in Lua, 1st edition(是的,我知道它有点过时了),在section 3.2(关于关系运算符)中,作者说:
例如,使用欧洲Latin-1语言环境,我们有“acai”< “açaí”< “acorde”。
我不明白。对我来说,"acai" < "açaí"
可以,但为什么"açaí" < "acorde"
?
AFAIK(and wikipedia seems to confirm),"c" < "ç"
,或者我错了?
答案 0 :(得分:8)
在第三版PiL中,此声明已被修改:
例如,对于葡萄牙语Latin-1语言环境,我们有
"acai"<"açaí"<"acorde"
。
因此需要将语言环境设置为葡萄牙语Latin-1:
print("acai" < "açaí")
print("açaí" < "acorde")
print(os.setlocale("pt_PT"))
print("acai" < "açaí")
print("açaí" < "acorde")
在ideone上,结果为:
true
false
pt_PT.iso88591
false
true
但"acai"
和"açaí"
的顺序似乎与现在的书有所不同。
答案 1 :(得分:5)
您引用代码页,将代码点映射到字符。当然,代码点是一组有限的非负整数,是有序的,不同的实体。但是,这不是人物的意思。
字符有collation个顺序,这是一个部分排序:字符可以“相等”但不相同。整理是一个用户价值的概念,因地区而异(随着时间的推移)。
字符串甚至更复杂,因为某些字符集(例如Unicode)可以具有组合字符。这允许“字符”表示为单个字符或基本字符,后跟组合字符。例如,“ä”vs“a¨”。由于它们代表相同的概念性特征,因此它们应被视为比“ä”与“a”更加平等。
在西班牙语中,“ch”,“rr”和“ll”曾经是字母表中的字母,并且相应地排序了单词;现在,他们不是,但“仍然”。
同样地,在过去,英语使用者以“Mc”开头的姓氏和以“M”开头的“Mac”之后的姓氏并不少见。
软件库必须处理这些事情,因为这是用户想要的。值得庆幸的是,一些较旧的惯例已经不再使用了。
因此,区域设置很可能具有导致“acai”&lt; “açaí”&lt; “acorde”如果“c”与“ç”具有相同的排序顺序,但“i”在“í”之前。虽然这种情况通常需要我们的代码允许它,但这种情况似乎很奇怪。