代码之家  ›  专栏  ›  技术社区  ›  Mike Atlas

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

  •  3
  • Mike Atlas  · 技术社区  · 15 年前

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

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

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

    我对是否使用 StringComparer.CurrentCulture 是要传递给的正确字符串比较参数 OrderBy() .如果应用程序的当前文化是 en-US 但我仍然希望对UTF-8数据进行“正确”排序,而不仅仅是 恩努斯 排序规则?

    我的困惑可能源于我对 NLSSORT Oracle中的函数,与.NET字符串比较和排序语义不太匹配。例如,设置nls_sort=japanese_m意味着它将正确地对拉丁语、西欧语和日语进行排序,而不管可排序列中给定字符串中是否有任何或所有字符。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Craig Stuntz    15 年前

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

    除了检测语言并进行相应的选择之外,不变文化是您的最佳选择。作为链接笔记的文档:

    不要:在大多数情况下使用基于StringComparison.InvariantCulture的字符串操作; 少数例外之一是坚持有语言意义但文化上不可知的数据。

    我增加了重点。这个例外或多或少是你所做的。

        2
  •  1
  •   Hans Passant    15 年前

    注意观察球:你可以帮助人类在列表中找到一根绳子。你需要一个熟练的语言学家同时了解英语、德语和日语的排序规则。在你的单子上放一只眼睛的几率是多少?始终确保列表是根据本地区域性规则排序的,并且排序是本地化的。