自訂大小寫對應和排序規則
循序項目的大小寫對應、字母順序和慣例會因不同的文化特性而有所不同。 您應該知道這些差異並了解它們可能導致字串作業的結果將因文化特性而異。
土耳其文字母的獨特大小寫對應規則可說明大小寫對應如何隨語言的不同而不同,即使在它們使用大部分相同字母的情況下。 在大部分拉丁字母中,字元 "I" (Unicode 0069) 是字元 "I" (Unicode 0049) 的小寫。 然而,土耳其字母有兩種字元 "I":一種有點,一種沒有點。 土耳其文中,字元 "I" (Unicode 0049) 視為另外字元 "I" (Unicode 0131) 的大寫。 而字元 "I" (Unicode 0069) 則被視為另一個字元 "İ" (Unicode 0130) 的小寫。 因此,雖然字元 "I" (Unicode 0069) 和 "I" (Unicode 0049) 的不區分大小寫的字串比較,對於大部分的文化特性都沒問題,但在指定為 "tr-TR" 的土耳其文 (土耳其) 文化特性中卻不適用。
注意事項 |
---|
指定為 "az-Latn-AZ" 的阿澤里文 (拉丁文,亞塞拜然) 文化特性也使用這個大小寫對應規則。 |
下列程式碼範例將示範對字串 "FILE" 及 "file" 所執行的不區分大小寫 String.Compare 作業,會因文化特性的不同而有不同的結果。 如果 Thread.CurrentThread.CurrentCulture 屬性設為指定為 "en-US" 的英文 (美國) 文化特性,比較作業會傳回 true。 如果目前的文化特性設為指定 "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
其他自訂大小寫對應和排序規則
除了土耳其文和阿澤里文字母中使用的獨特大小寫對應以外,另外還有您在考慮字串作業時應該知道的其他自訂大小寫對應和排序規則。 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_tradnl"
例如,在丹麥文中,不區分大小寫的二字母字組 "aA" 和 "AA" 的比較不視為相等。 在越南字母中,不區分大小寫的二字母字組 "nG" 和 "NG" 的比較不視為相等。 雖然您應留意這些規則的存在,但實際上,這些字組的文化特性比較發生問題的情況並不常見,因為它們不常是固定字串或識別項。
ASCII 範圍內的六種文化特性字母都有標準的大小寫規則,但排序次序則不同。 這些文化特性包括:
愛沙尼亞文 (愛沙尼亞),"et-EE"
芬蘭文 (芬蘭),"fi-FI"
匈牙利文 (匈牙利,傳統式排序),"hu-HU_technl"
立陶宛文 (立陶宛),"lt-LT"
瑞典文 (芬蘭),"sv-FI"
瑞典文 (瑞典),"sv-SE"
例如,在瑞典文中,"w" 字母會如同 "v" 字母一樣排序。 在應用程式的程式碼中,排序作業的使用常比相等比較來得少,因此較不會發生問題。
其他 35 個文化特性在 ASCII 範圍之外,有自訂的大小寫對應和排序規則。 這些規則一般限用於特定文化特性所使用的字母中。 因此,其造成問題的可能性很低。
如需適用於特定文化特性的自訂大小寫對應和排序規則的詳細資訊,請參閱 Unicode 首頁。