我有一个要使用Enumerable.OrderBy进行排序的UTF-8字符串列表。字符串可以包含任意数量的字符集-例如,英语、德语和日语,或者它们的混合,甚至。
例如,下面是一个示例输入列表:
["東京","North 東京", "München", "New York", "Chicago", "大阪市"]我不知道使用StringComparer.CurrentCulture是否是传递给OrderBy()的正确的字符串比较参数。如果应用程序的当前区域性是en-US,但我仍然希望在en-US排序规则之外“正确地”对UTF8数据进行排序,该怎么办?
我的困惑可能源于我对Oracle中的NLSSORT函数的理解,该函数与.NET字符串比较和排序语义不太匹配。例如,设置NLS_SORT=Japanese_M意味着它将正确地对拉丁语、西欧和日语进行排序,而不管这些字符是否出现在可排序列中的给定字符串中。
发布于 2010-01-07 05:34:40
没有一种比较适用于所有文化。
除了检测语言并做出相应选择之外,InvariantCulture是您最好的选择。正如您链接的文档所注明的:
不要:在大多数情况下使用基于StringComparison.Invariable的字符串操作;少数例外之一是持久化具有语言意义但与文化无关的数据。
我增加了重点。这个例外或多或少就是你正在做的。
发布于 2010-01-07 05:56:53
把你的眼睛放在球上:你排序是为了帮助人类在列表中找到一个字符串。您需要一位熟练的语言学家来同时了解英语、德语和日语的排序规则。一只眼睛出现在你的清单上的几率有多大?始终确保列表是根据本地区域性规则进行排序的,并且排序是本地化的。
https://stackoverflow.com/questions/2016384
复制相似问题