2013-12-10 30 views
0

在丹麥語中,雙字母「aa」對應單個字母「å」,實際上意味着像奧爾胡斯和奧爾堡這樣的城市可以拼寫奧爾胡斯和奧爾堡。由於「å」是字母表的最後一個字母,這意味着當使用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 

那麼,如何去測試字符串相等跨不同的區域設置?

+0

是你的問題,比如,我們如何能夠比較丹麥一個土耳其字符串? –

+1

您似乎期待字符串比較可以神奇地應用某些語言特定的約定特定規則。那麼,它不會。字符串「å」和「aa」是截然不同的,就像「ae」和「ä」和「æ」都是截然不同的,即使有些約定允許當人們將「ä」和「æ」替換爲「ae」時不知道如何產生正確的字符。這完全不是一個字符級別的問題,如果您想考慮這種後備/傳統替換,則需要單獨對它們進行編碼。 –

+0

的確我做過了,但那是「神奇的」?也許這只是我,但我認爲完全合乎邏輯的是,你可以正確地對字符串進行排序,但不能比較它們。但是,我想也許設計和維護它會有太多的工作 - 不幸的是 - 因爲當比較不同語言的地址時,您需要了解所有這些語言特定的約定,並自己編碼 - 正如maccrobbsen所暗示的那樣。 – sondergard

回答

0

我建議你寫自己的相等比較器, G。

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); 
} 
+0

這似乎是實現它的一個好方法:) – sondergard