文化特定的字符串平等(丹麦语)

时间:2013-12-10 15:27:31

标签: c# localization string-comparison

在丹麦语中,双字母“aa”对应于单个字母“å”,实际上意味着Århus和Ålborg等城市可以拼写为奥胡斯和奥尔堡。由于“å”是字母表的最后一个字母,这意味着当使用String.Compare或排序列表时,这些单词最后排序,这很好 - 这里有几个用户已经发现。

然而它似乎并不知道这两个实际上是相同的,因为string.Equals,string.Compare和StringComparer都返回false:

Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CreateSpecificCulture("da-DK");
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("da-DK");

string str1 = "Aalborg";
string str2 = "Ålborg";

StringComparer.Create(CultureInfo.CreateSpecificCulture("da-DK"), true).Equals(str1, str2); // False
string.Equals(str1, str2, StringComparison.CurrentCultureIgnoreCase); // False
string.Compare(str1, str2, StringComparison.CurrentCultureIgnoreCase); // 1

那么如何在不同的语言环境中测试字符串相等性呢?

1 个答案:

答案 0 :(得分:0)

我建议你写自己的平等比较器,e。克。

public class MyDanishStringComparer : IEqualityComparer<string>
{
  public bool Equals(string x, string y)
  {
    return x.Replace("Å", "Aa").Equals(y.Replace("Å", "Aa"));
  }
}

可以像这样调用:

public class MyTest
{
  string s1 = "Ålborg";
  string s2 = "Aalborg";
  MyDanishStringComparer comparer = new MyDanishStringComparer();

  comparer.Equals(s1, s2);
}