在这种情况下,StringComparer.CurrentCulture是正确的选择吗?

时间:2010-01-06 21:28:33

标签: .net linq utf-8 sql-order-by string-comparison

我有一个UTF-8字符串列表,我希望使用Enumerable.OrderBy进行排序。字符串可以包含任意数量的字符集 - 例如,英语,德语和日语,或者它们的混合,甚至。

例如,这是一个示例输入列表:

["東京","North 東京", "München", "New York", "Chicago", "大阪市"]

我很困惑使用StringComparer.CurrentCulture是否是传递给OrderBy()的正确的字符串比较参数。如果应用程序的当前文化是en-US但我仍然想要“正确”排序UTF-8数据而不仅仅是en-US排序规则会怎样?

我的困惑可能源于我对Oracle中NLSSORT函数的理解,它与.NET字符串比较和排序语义不完全匹配。例如,设置NLS_SORT = Japanese_M意味着它将正确地对Latin,Western European和Japanese进行排序,无论是否在可排序列中的给定字符串中出现任何或所有字符。

2 个答案:

答案 0 :(得分:4)

没有一种比较适用于所有文化。

如果没有检测到语言并进行相应选择,InvariantCulture是您最好的选择。作为您链接笔记的文件:

  

请勿:在大多数情况下使用基于StringComparison.InvariantCulture的字符串操作; 为数不多的例外之一是持久存在语义上有意义但与文化无关的数据。

我补充说。这种例外或多或少与你正在做的事情有关。

答案 1 :(得分:1)

密切关注球:你可以帮助人类在列表中找回一个字符串。您需要熟练的语言专家同时了解英语,德语和日语的排序规则。一个人盯着你的名单的几率是多少?始终确保列表根据当地文化规则进行排序,并且排序已本地化。