比较"î"
string.Compare("î", "I ", StringComparison.CurrentCulture) -- returns -1
string.Compare("î", "I ", StringComparison.CurrentCultureIgnoreCase) -- returns -1
string.Compare("î", "I", StringComparison.CurrentCulture) -- returns 1 (unexpected)
string.Compare("î", "I", StringComparison.CurrentCultureIgnoreCase) -- returns 1 (unexpected)
Run Code Online (Sandbox Code Playgroud)
随着"我"
string.Compare("i", "I ", StringComparison.CurrentCulture) -- returns -1
string.Compare("i", "I ", StringComparison.CurrentCultureIgnoreCase) -- returns -1
string.Compare("i", "I", StringComparison.CurrentCulture) -- returns -1
string.Compare("i", "I", StringComparison.CurrentCultureIgnoreCase) -- returns 0
Run Code Online (Sandbox Code Playgroud)
目前的文化是en-GB.我希望所有这些都返回1.为什么更长的字符串会改变排序顺序?
有关完整详细信息,请参阅UTS#10:Unicode归类算法.
特别是,请参见1.1多级比较,它解释了这种行为.
那里有一张表格,展示了一些例子,例如:
role < rôle < roles
这类似于"I","î"和"I"的例子,即:
"I" < "î" < "I "
除非roles有一个s底,你的例子有,在后面加上一个空格.但同样的逻辑适用; 这是无关紧要的多余的字符是什么-简单的事实,那就是一个多余的字符使得排序后"我".
该规范的一个关键点是:
如果基本字母不同,通常会忽略重音差异.
如果长度不同,则基本字母会有所不同,因此在示例中忽略重音差异,并在末尾添加空格.
但是,如果字符串的长度相同,则不会忽略重音差异- 这正是您所看到的结果.