字符串排序时,é应该排在e之前吗?

5

如果我要对两个字符串café和cafe进行排序,是否有最佳实践来确定哪个字母排在前面?我在javascript中测试了localeCompare,发现café排在cafe之前,但我不理解原因。


这可能与您有关:https://dev59.com/5Gw05IYBdhLWcg3w_Gqw - MatthewMartin
对我来说似乎是相反的 -> http://jsfiddle.net/xvBWa/ - adeneo
2个回答

4

我不认为我理解你在说什么。令人困惑的是排序顺序并不反映实际单词。 - Chris.Stover
localeCompare 去除重音符号,例如将 café 转换为 cafe - 因此当您使用它进行排序时,它会将 cafe 与 cafe 进行排序。 - Martin Jespersen
我以两种不同的方式进行了测试。第一次测试是["café", "cafe"],第二次测试是["cafe", "café"]。两次输入顺序都没有关系,咖啡馆都是第一个输出的。如果它去掉了变音符号,那么顺序不应该被保留吗? - Chris.Stover
localeCompare的问题在于它完全依赖于实现,你无法保证两个浏览器使用此方法时会表现相同(尽管大多数情况下是这样的)。我不知道你在哪个浏览器中进行了测试,但在最新的Chrome中, 'cafe'.localeCompare('café') != 'café'.localeCompare('cafe'),所以是的,顺序应该被保留。 - Martin Jespersen

2

https://en.wikipedia.org/wiki/Collation

文本排序的方式取决于实现方法。
一种传统的方法是使用“美国标准信息交换码”(US-ASCII)字符表示法,特别是在C编程语言中。按照ASCII排序文本时,顺序仅取决于ASCII规范中每个字符的数字值。有时这被称为“C”语言环境。
现代软件通常应该使用合适的语言环境,以便排序方式符合人们的期望,而不受计算机所使用字符的数字表示形式的影响。
另请参见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接