共用方式為


自訂大小寫對應和排序規則

循序項目的大小寫對應、字母順序和慣例會因不同的文化特性而有所不同。您應該知道這些差異並瞭解它們可能導致字串作業的結果將因文化特性而異。

土耳其文字母的獨特大小寫對應規則可說明大小寫對應如何隨語言的不同而不同,即使在它們使用大部分相同字母的情況下。在大部分拉丁字母中,字元 i (Unicode 0069) 是字元 I (Unicode 0049) 的小寫。然而,土耳其字母有兩種字元 I:一種有點,一種沒有點。土耳其文中,字元 I (Unicode 0049) 視為另外字元 ı (Unicode 0131) 的大寫版本。而字元 i (Unicode 0069) 則被視為另一個字元 İ (Unicode 0130) 的小寫。因此,雖然字元 i (Unicode 0069) 和 I (Unicode 0049) 的不區分大小寫的字串比較,對於大部分的文化特性都沒問題,但在文化特性 "tr-TR" (土耳其的土耳其文) 中卻不適用。

下列程式碼範例將示範對字串 "FILE" 及 "file" 所執行的不區分大小寫 String.Compare 作業,會因文化特性的不同而有不同的結果。如果 Thread.CurrentCulture 屬性設為 "en-US" (美國英文),比較作業會傳回 true。如果 CurrentCulture 設為 "tr-TR" (土耳其的土耳其文),比較作業則會傳回 false

Imports System
Imports System.Globalization
Imports System.Threading

Public Class TurkishISample
    Public Shared Sub Main()
        ' Set the CurrentCulture property to English in the U.S.
        Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
        Console.WriteLine("Culture = {0}", _
            Thread.CurrentThread.CurrentCulture.DisplayName)
        Console.WriteLine("(file == FILE) = {0}", String.Compare("file", _
            "FILE", True) = 0)
        
        ' Set the CurrentCulture property to Turkish in Turkey.
        Thread.CurrentThread.CurrentCulture = New CultureInfo("tr-TR")
        Console.WriteLine("Culture = {0}", _
            Thread.CurrentThread.CurrentCulture.DisplayName)
        Console.WriteLine("(file == FILE) = {0}", String.Compare("file", _
            "FILE", True) = 0)
    End Sub
End Class
using System;
using System.Globalization;
using System.Threading;

public class TurkishISample
{
    public static void Main()
    {
    // Set the CurrentCulture property to English in the U.S.
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
    Console.WriteLine("Culture = {0}",   
        Thread.CurrentThread.CurrentCulture.DisplayName);
    Console.WriteLine("(file == FILE) = {0}", (string.Compare("file", 
        "FILE", true) == 0));

    // Set the CurrentCulture property to Turkish in Turkey.
    Thread.CurrentThread.CurrentCulture = new CultureInfo("tr-TR");
    Console.WriteLine("Culture = 
        {0}",Thread.CurrentThread.CurrentCulture.DisplayName);
    Console.WriteLine("(file == FILE) = {0}", (string.Compare("file", 
        "FILE", true) == 0));
    }
}

下列對主控台的輸出說明結果如何因文化特性而異,因為不區分大小寫的 i 與 I 的比較對 "en-US" 文化特性會判定為 true,而對 "tr-TR" 文化特性則為 false

Culture = English (United States)
(file == FILE) = True
Culture = Turkish (Turkey)
(file == FILE) = False
Note注意事項

文化特性 "az -AZ-Latn" (亞塞拜然的阿澤里文 (拉丁)) 也使用這個大小寫對應規則。

其他自訂大小寫對應和排序規則

除了土耳其文和阿澤里文字母中使用的獨特大小寫對應以外,還有您在執行字串作業時應該知道的其他自訂大小寫對應和排序規則。ASCII 範圍中九種文化特性的字母 (Unicode 0000- Unicode 007F) 所包含的二字母字組,其中不區分大小寫比較的結果,如 String.Compare,當大小寫混合時不評估為相等。這些文化特性是 "hr-HR" (克羅埃西亞的克羅埃西亞文)、"cs-CZ" (捷克共和國的捷克文)、"sk-SK" (斯洛伐克的斯洛伐克文)、"da-DK" (丹麥的丹麥文)、"nb-NO" (挪威的挪威文 (巴克摩))、"nn-NO" (挪威的挪威文 (耐諾斯克))、"hu-HU" (匈牙利的匈牙利文)、"vi-VN" (越南的越南文),以及使用傳統排序次序的 "es-ES" (西班牙的西班牙文)。例如,在丹麥文中,不區分大小寫的二字母字組 aA 和 AA 的比較不被視為相等。在越南字母中,不區分大小寫的二字母字組 nG 和 NG 的比較不被視為相等。雖然您應留意這些規則的存在,但實際上,這些字組的文化特性比較發生問題的情況並不常見,因為它們不常是固定字串或識別項。

ASCII 範圍內的六種文化特性字母都有標準的大小寫規則,但排序次序則不同。這些文化特性是 "et-EE" (愛沙尼亞的愛沙尼亞文)、"fi-FI" (芬蘭的芬蘭文)、使用技術排序次序的 "hu-HU" (匈牙利的匈牙利文)、"lt-LT" (立陶宛的立陶宛文)、"sv-FI" (芬蘭的瑞典文),以及 "sv-SE" (瑞典的瑞典文)。例如,在瑞典字母中,字母 w 會像 v 一樣排序。在應用程式的程式碼中,排序作業的使用常比相等比較來得少,因此較不會發生問題。

其他 35 個文化特性在 ASCII 範圍之外,有自訂的大小寫對應和排序規則。這些規則一般限用於那些特定文化特性所使用的字母中。因此,其造成問題的可能性很低。

如需適用於特定文化特性的自訂大小寫對應和排序規則的詳細資訊,請參閱<Unicode Standard>,網址為 www.unicode.org。

請參閱

概念

不區分文化特性的字串作業

其他資源

執行不區分文化特性的字串作業