Сравнение и сортировка данных для конкретного языка и региона

Соглашения для сортировки и упорядочения данных зависят от региональных параметров. Например, порядок сортировки может зависеть или не зависеть от регистра символов. Он может быть основан на фонетике или на визуальном представлении символов. В языках Восточной Азии символы сортируются по штрихам и корням идеограмм. Сортировка также зависит от того, какой порядок используют региональные параметры для алфавита. Например, датский языке есть символ «Æ», он действует в алфавите после буквы «Z». Международные приложения должны поддерживать сравнениеи сортировку данных в зависимости правил характерных для конкретоного языка и региона.

Примечание

В некоторых сценариях, учитывающего язык и региональные параметры расширение функциональности нежелательно.Дополнительные сведения о том, когда и как проводить операции, не зависящие от языка и региона, см. в разделе Строковые операции, не зависящие от языка и региона.

Сравнение строк

Класс CompareInfo предоставляет методы для сравнения строк, зависящих от языка и региона. Класс CultureInfo обладает свойством CompareInfo, которое получает экземпляр класса CompareInfo. Объект CompareInfo определяет порядок сравнения и сортировки строк для конкретного языка и региона. Метод String.Compare использует сведения в объекте CompareInfo региональных параметров для сравнения строк.

В следующем примере показано, как метод String.Compare возвращает две строки ("apple" и "Æble") по-разному, в зависимости от региональных параметров, используемых для сравнения. Сначала свойство System.Threading.Thread.CurrentThread.CurrentCulture установлено в da-DK региональных параметров Дании (датский язык). В датском языке символ "Æ" рассматривается как отдельная буква и стоит в алфавите после буквы "Z". Поэтому строка "Æble" больше, чем "apple" для региональных параметров Дании (датский язык). Далее свойство System.Threading.Thread.CurrentThread.CurrentCulture установлено в en-US для региональных параметров Соединенных Штатов (английский язык), английский язык обрабатывает символ "Æ" как специальный символ и сортирует его так, что он располагается в алфавите перед буквой "А". Поэтому строка "Æble" меньше "apple" для региональных параметров Соединенных Штатов (английский язык).

Imports System.Globalization
Imports System.Threading

Public Class TestClass
   Public Shared Sub Main()
      Dim str1 As String = "Apple"
      Dim str2 As String = "Æble"

      ' Set the current culture to Danish in Denmark.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("da-DK")
      Dim result1 As Integer = [String].Compare(str1, str2)
      Console.WriteLine("When the CurrentCulture is ""da-DK"",")
      Console.WriteLine("the result of comparing_{0} with {1} is: {2}", 
                        str1, str2, result1)

      ' Set the current culture to English in the U.S.
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      Dim result2 As Integer = [String].Compare(str1, str2)
      Console.WriteLine("When the CurrentCulture is""en-US"",")
      Console.WriteLine("the result of comparing {0} with {1} is: {2}", 
                        str1, str2,result2)
   End Sub
End Class
' The example displays the following output:
'    When the CurrentCulture is "da-DK",
'    the result of comparing Apple with Æble is: -1
'    
'    When the CurrentCulture is "en-US",
'    the result of comparing Apple with Æble is: 1
using System;
using System.Globalization;
using System.Threading;

public class CompareStringSample
{
   public static void Main()
   {
      string str1 = "Apple";
      string str2 = "Æble"; 

      // Sets the CurrentCulture to Danish in Denmark.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
      // Compares the two strings.
      int result1 = String.Compare(str1, str2);
      Console.WriteLine("\nWhen the CurrentCulture is \"da-DK\",\nthe " + 
                        "result of comparing {0} with {1} is: {2}", str1, str2, 
                        result1);

      // Sets the CurrentCulture to English in the U.S.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
      // Compares the two strings.
      int result2 = String.Compare(str1, str2);
      Console.WriteLine("\nWhen the CurrentCulture is \"en-US\",\nthe " + 
                        "result of comparing {0} with {1} is: {2}", str1, str2, 
                        result2);
   }
}
// The example displays the following output:
//    When the CurrentCulture is "da-DK",
//    the result of comparing Apple with Æble is: -1
//    
//    When the CurrentCulture is "en-US",
//    the result of comparing Apple with Æble is: 1

Дополнительные сведения о сравнении строк см. в разделе Сравнения строк.

Использование альтернативного порядка сортировки

Для некоторых языков и регионов поддерживается несколько порядков сортировки. Например, (китайский — КНР) язык zh-cn поддерживает 2 порядок сортировки: (по умолчанию) и по числу штрихов. При создании объекта CultureInfo с использованием имени языка и региональных параметров, например "zh-CN", применяется порядок сортировки по умолчанию. Чтобы указать другой порядок сортировки, создайте объект CultureInfo путем вызова конструкторов CultureInfo.CultureInfo(Int32) или CultureInfo.CultureInfo(Int32, Boolean) и использования идентификатора другого порядка сортировки, а затем получите объект CompareInfo из свойства CompareInfo для использования при сравнении строк. Также можно создать объект CompareInfo непосредственно с помощью метода CompareInfo.GetCompareInfo и указать идентификатор для альтернативного порядка сортировки.

В приведенной ниже таблице перечислены языки и региональные параметры, в которых поддерживается альтернативный порядок сортировки, и идентификаторы для порядка сортировки по умолчанию и альтернативного порядка сортировки.

Название языка и региональных параметров

Язык и региональные параметры

Название и идентификатор для типа сортировки по умолчанию

Название и идентификатор для альтернативного типа сортировки

es-ES

Испанский (Испания)

Международная: 0x00000C0A

Традиционная: 0x0000040A

zh-TW

Китайский (Тайвань)

По числу штрихов: 0x00000404

Бопомофо: 0x00030404

zh-CN

Китайский (КНР)

Произношение: 0x00000804

По числу штрихов: 0x00020804

zh-HK

Китайский (Гонконг)

По числу штрихов: 0x00000c04

По числу штрихов: 0x00020c04

zh-SG

Китайский (Сингапур)

Произношение: 0x00001004

По числу штрихов: 0x00021004

zh-MO

Китайский (Макао)

Произношение: 0x00001404

По числу штрихов: 0x00021404

ja-JP

Японский (Япония)

По умолчанию: 0x00000411

Юникод: 0x00010411

ko-KR

Корейский (Корея)

По умолчанию: 0x00000412

Корейский Xwansung – Юникод: 0x00010412

de-DE

Немецкий (Германия)

Словарь: 0x00000407

Сортировка по телефонной книге DIN: 0x00010407

hu-HU

Венгерский (Венгрия)

По умолчанию: 0x0000040e

Техническая сортировка: 0x0001040e

ka-GE

Грузинский (Грузия)

Традиционная: 0x00000437

Современная сортировка: 0x00010437

Поиск строк

Можно вызвать перегруженный метод CompareInfo.IndexOf для извлечения индекса символа или подстроки внутри определенной строки. Метод возвращает -1, если не найден символ или подстрока. Поиск отдельного символа, перегруженных методов IndexOf, принимающих параметр типа CompareOptions могут работать иначе, чем сравнения перегруженные версии методов, не принимающих этот параметр. Перегрузки методов без этого параметра выполняют чувствительный к региональным параметрам и регистру поиск. Например, символ является составным знаком Юникод, например лигатурой "Æ" (\u00C6), для некоторых языков и регионов такой символ можно считать эквивалентным любому вхождению его компонентов в правильной последовательности, например "AE" (U+0041, U+0045). Для выполнения (зависящего от региональных параметров) поиска по порядковым номерам точных значений Юникода, используйте одну из перегрузок CompareInfo.IndexOf, которая принимает параметр типа CompareOptions и устанавливает значение параметра равным Ordinal.

Также можно вызвать перегрузки метода String.IndexOf, которые выполняют поиск символа для поиска по порядковым номерам (без учета языка и региональных параметров). Необходимо помнить, что перегрузки этого метода, предназначенные для поиска строк, выполняют поиск с учетом культурной среды.

Следующий пример показывает разницу между результатами, возвращаемыми методом CompareInfo.IndexOf в зависимости от языка и региона. Пример создает объект CultureInfo для региональных параметров Дании (датский язык) и Соединенных Штатов (английский язык) и использует перегрузку метода CompareInfo.IndexOf для поиска символа "æ" в строках "æble" и "aeble". Для региональных параметров Дании (датский язык), метод CompareInfo.IndexOf(String, Char) и метод CompareInfo.IndexOf(String, Char, CompareOptions), имеющий параметр сравнения CompareOptions.Ordinal, возвращают одно и то же значение для каждой строки. Это указывает на то, что символ "æ" рассматривается как эквивалентный только для значения Юникода \u00E6. Для региональных параметров Соединенных Штатов (английский язык) две перегрузки возвращают различные результаты при поиске "æ" в строке "aeble". Это указывает, что при сравнении с учетом языка и региона, производимом при помощи метода CompareInfo.IndexOf(String, Char), символ "æ" принимается равным его компонентам "a" и "e".

Imports System.Globalization
Imports System.Threading

Public Class Example
   Public Shared Sub Main()
      Dim str1 As String = "æble"
      Dim str2 As String = "aeble"
      Dim find As Char = "æ"c

      ' Create CultureInfo objects representing the Danish (Denmark)
      ' and English (United States) cultures.
      Dim cultures() As CultureInfo = { CultureInfo.CreateSpecificCulture("da-DK"), 
                                        CultureInfo.CreateSpecificCulture("en-US") }

      For Each ci In cultures
         Thread.CurrentThread.CurrentCulture = ci

         Dim result1 As Integer = ci.CompareInfo.IndexOf(str1, find)
         Dim result2 As Integer = ci.CompareInfo.IndexOf(str2, find)
         Dim result3 As Integer = ci.CompareInfo.IndexOf(str1, find, _ 
            CompareOptions.Ordinal)
         Dim result4 As Integer = ci.CompareInfo.IndexOf(str2, find, _
            CompareOptions.Ordinal)      

         Console.WriteLine("The current culture is {0}", 
                           CultureInfo.CurrentCulture.Name)
         Console.WriteLine()
         Console.WriteLine("   CompareInfo.IndexOf(string, char) method:")
         Console.WriteLine("   Position of {0} in the string {1}: {2}", 
                           find, str1, result1)
         Console.WriteLine()
         Console.WriteLine("   CompareInfo.IndexOf(string, char) method:")
         Console.WriteLine("   Position of {0} in the string {1}: {2}", 
                           find, str2, result2)
         Console.WriteLine()
         Console.WriteLine("   CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method")
         Console.WriteLine("   Position of {0} in the string {1}: {2}", 
                           find, str1, result3)
         Console.WriteLine()
         Console.WriteLine("   CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method")
         Console.WriteLine("   Position of {0} in the string {1}: {2}", 
                           find, str2, result4)
         Console.WriteLine()
      Next
   End Sub
End Class
' The example displays the following output:
'    The current culture is da-DK
'    
'       CompareInfo.IndexOf(string, char) method:
'       Position of æ in the string æble: 0
'    
'       CompareInfo.IndexOf(string, char) method:
'       Position of æ in the string aeble: -1
'    
'       CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method
'       Position of æ in the string æble: 0
'    
'       CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method
'       Position of æ in the string aeble: -1
'    
'    The current culture is en-US
'    
'       CompareInfo.IndexOf(string, char) method:
'       Position of æ in the string æble: 0
'    
'       CompareInfo.IndexOf(string, char) method:
'       Position of æ in the string aeble: 0
'    
'       CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method
'       Position of æ in the string æble: 0
'    
'       CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method
'       Position of æ in the string aeble: -1
using System;
using System.Globalization;
using System.Threading;

public class Example
{
   public static void Main()
   {
      string str1 = "æble";
      string str2 = "aeble";
      char find = 'æ';

      // Create CultureInfo objects representing the Danish (Denmark)
      // and English (United States) cultures.
      CultureInfo[] cultures = { CultureInfo.CreateSpecificCulture("da-DK"), 
                                 CultureInfo.CreateSpecificCulture("en-US") };

      foreach (var ci in cultures) {
         Thread.CurrentThread.CurrentCulture = ci;

         int result1 = ci.CompareInfo.IndexOf(str1, find);
         int result2 = ci.CompareInfo.IndexOf(str2, find);
         int result3 = ci.CompareInfo.IndexOf(str1, find,  
                                              CompareOptions.Ordinal);
         int result4 = ci.CompareInfo.IndexOf(str2, find, 
                                              CompareOptions.Ordinal);      

         Console.WriteLine("\nThe current culture is {0}", 
                           CultureInfo.CurrentCulture.Name);
         Console.WriteLine("\n   CompareInfo.IndexOf(string, char) method:");
         Console.WriteLine("   Position of {0} in the string {1}: {2}", 
                           find, str1, result1);

         Console.WriteLine("\n   CompareInfo.IndexOf(string, char) method:");
         Console.WriteLine("   Position of {0} in the string {1}: {2}", 
                           find, str2, result2);

         Console.WriteLine("\n   CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method");
         Console.WriteLine("   Position of {0} in the string {1}: {2}", 
                           find, str1, result3);

         Console.WriteLine("\n   CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method");
         Console.WriteLine("   Position of {0} in the string {1}: {2}", 
                           find, str2, result4);
         Console.WriteLine();
      }   
   }
}
// The example displays the following output
//    The current culture is da-DK
//    
//       CompareInfo.IndexOf(string, char) method:
//       Position of æ in the string æble: 0
//    
//       CompareInfo.IndexOf(string, char) method:
//       Position of æ in the string aeble: -1
//    
//       CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method
//       Position of æ in the string æble: 0
//    
//       CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method
//       Position of æ in the string aeble: -1
//    
//    
//    The current culture is en-US
//    
//       CompareInfo.IndexOf(string, char) method:
//       Position of æ in the string æble: 0
//    
//       CompareInfo.IndexOf(string, char) method:
//       Position of æ in the string aeble: 0
//    
//       CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method
//       Position of æ in the string æble: 0
//    
//       CompareInfo.IndexOf(string, char, CompareOptions.Ordinal) method
//       Position of æ in the string aeble: -1

Сортировка строк

Можно использовать некоторые из перегруженных методов Array.Sort для сортировки массивов, основанных на текущих региональных параметров. В следующем примере создается массив из трех строк. Сначала задается свойство System.Threading.Thread.CurrentThread.CurrentCulture для en-US и вызывается метод Array.Sort(Array). Полученный в результате порядок сортировки основан на правилах сортировки для языка и региональных параметров Английский (США). Затем примере задает свойство System.Threading.Thread.CurrentThread.CurrentCulture для da-DK и вызывает метод Array.Sort снова. Обратите внимание, что теперь порядок сортировки отличается от результата для языка и региональных параметров "en-US", так как используются правило сортировки данных для Дании (датский язык).

Imports System.Globalization
Imports System.IO
Imports System.Threading

Public Class TextToFile   
   Public Shared Sub Main()
      ' Creates and initializes a new array to store 
      ' these date/time objects.
      Dim stringArray() As String = { "Apple", "Æble", "Zebra"}

      ' Displays the values of the array.
      Console.WriteLine("The original string array:")
      PrintIndexAndValues(stringArray)

      ' Set the CurrentCulture to "en-US".
      Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
      ' Sort the values of the Array.
      Array.Sort(stringArray)

      ' Display the values of the array.
      Console.WriteLine("After sorting for the ""en-US"" culture:")
      PrintIndexAndValues(stringArray)

      ' Set the CurrentCulture to "da-DK".
      Thread.CurrentThread.CurrentCulture = New CultureInfo("da-DK")
      ' Sort the values of the Array.
      Array.Sort(stringArray)

      ' Displays the values of the Array.
      Console.WriteLine("After sorting for the culture ""da-DK"":")
      PrintIndexAndValues(stringArray)
   End Sub

   Public Shared Sub PrintIndexAndValues(myArray() As String)
      For i As Integer = myArray.GetLowerBound(0) To myArray.GetUpperBound(0)
         Console.WriteLine("[{0}]: {1}", i, myArray(i))
      Next
      Console.WriteLine()
   End Sub 
End Class
' The example displays the following output:
'       The original string array:
'       [0]: Apple
'       [1]: Æble
'       [2]: Zebra
'       
'       After sorting for the "en-US" culture:
'       [0]: Æble
'       [1]: Apple
'       [2]: Zebra
'       
'       After sorting for the culture "da-DK":
'       [0]: Apple
'       [1]: Zebra
'       [2]: Æble
using System;
using System.Globalization;
using System.Threading;

public class ArraySort 
{
   public static void Main(String[] args) 
   {
      // Create and initialize a new array to store the strings.
      string[] stringArray = { "Apple", "Æble", "Zebra"};

      // Display the values of the array.
      Console.WriteLine( "The original string array:");
      PrintIndexAndValues(stringArray);

      // Set the CurrentCulture to "en-US".
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
      // Sort the values of the array.
      Array.Sort(stringArray);

      // Display the values of the array.
      Console.WriteLine("After sorting for the culture \"en-US\":");
      PrintIndexAndValues(stringArray); 

      // Set the CurrentCulture to "da-DK".
      Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
      // Sort the values of the Array.
      Array.Sort(stringArray);

      // Display the values of the array.
      Console.WriteLine("After sorting for the culture \"da-DK\":");
      PrintIndexAndValues(stringArray); 
   }
   public static void PrintIndexAndValues(string[] myArray)  
   {
      for (int i = myArray.GetLowerBound(0); i <= 
            myArray.GetUpperBound(0); i++ )
         Console.WriteLine("[{0}]: {1}", i, myArray[i]);
      Console.WriteLine();      
   }
}
// The example displays the following output:
//       The original string array:
//       [0]: Apple
//       [1]: Æble
//       [2]: Zebra
//       
//       After sorting for the "en-US" culture:
//       [0]: Æble
//       [1]: Apple
//       [2]: Zebra
//       
//       After sorting for the culture "da-DK":
//       [0]: Apple
//       [1]: Zebra
//       [2]: Æble

Использование ключей сортировки

Платформа .NET Framework использует ключи сортировки для поддержки операций сортировки, зависящих от региональных параметров. Каждому знаку в строке ставится в соответствие несколько категорий весовых коэффициентов для сортировки, в том числе весовые коэффициенты, алфавитные, регистра и диакритические. Ключ сортировки предоставляет хранилище этих весовых коэффициентов для конкретной строки. Например, ключ сортировки может содержать строку с алфавитными весами, после которой идет строка с регистровыми весами и т. д. Дополнительные сведения о ключах сортировки см. на Стандарт юникод №10 технический: Алгоритм сортировки юникода.

В платформе .NET Framework класс SortKey сопоставляет строкам свои ключи сортировки. Чтобы создать требуемый ключ сортировки для указанной строки, можно использовать метод CompareInfo.GetSortKey. Результат последовательности байтов, которые могут различаться в зависимости от свойства CurrentCulture и заданного значения CompareOptions. Например, если указать значение CompareOptions.IgnoreCase при создании ключа сортировки, операция сравнения строк с помощью ключа сортировки будет являться чувствительной к регистру.

После создания ключ сортировки для строки, можно передать его в качестве параметра метода, реализованного в классе SortKey. Метод SortKey.Compare позволяет сравнивать ключи сортировки. Поскольку метод осуществляет побайтовое сравнение, при его работе обеспечивается более высокая скорость по сравнению с методом String.Compare. Если приложение выполняет большое число операций сортировки, можно повысить его производительность за счет создания и хранения ключей сортировки для всех строк, которые он использует. При выполнении операций сортировки или сравнения в приложении будут использоваться ключи сортировки вместо строк.

В следующем примере создаются ключи сортировки для двух строк (str1 и str2) , где свойство CurrentCulture является множеством для da-DK. Выполняется сравнение двух строк с помощью метода SortKey.Compare с последующим выводом результата на экран. Метод возвращает отрицательное целое число, если str1 меньше, чем str2, ноль, если str1 и str2 равны, или положительное целое число, если str1 больше, чем str2. Затем пример задает свойство System.Threading.Thread.CurrentThread.CurrentCulture для en-US и создает новые ключи сортировки для тех же строк. Пример сравнивает ключи сортировки и выводит результаты. Обратите внимание, что результаты сортировки отличаются в зависимости от текущих региональных параметров. Несмотря на то, что результаты приведенного ниже примера идентичны результатам в примере Сравнение строк, приведенном ранее в этом разделе, метод SortKey.Compare быстрее, чем метод String.Compare.

Imports System.Globalization
Imports System.Threading

Public Class SortKeySample
   Public Shared Sub Main()
      Dim str1 As [String] = "Apple"
      Dim str2 As [String] = "Æble"

      ' Set the CurrentCulture to "da-DK".
      Dim dk As New CultureInfo("da-DK")
      Thread.CurrentThread.CurrentCulture = dk

      ' Create a culturally sensitive sort key for str1.
      Dim sc1 As SortKey = dk.CompareInfo.GetSortKey(str1)
      ' Create a culturally sensitive sort key for str2.
      Dim sc2 As SortKey = dk.CompareInfo.GetSortKey(str2)

      ' Compare the two sort keys and display the results.
      Dim result1 As Integer = SortKey.Compare(sc1, sc2)
      Console.WriteLine("When the  current culture is ""da-DK"",")
      Console.WriteLine("the result of comparing {0} with {1} is: {2}", 
                        str1, str2, result1)
      Console.WriteLine()

      ' Set the CurrentCulture to "en-US".
      Dim enus As New CultureInfo("en-US")
      Thread.CurrentThread.CurrentCulture = enus

      ' Create a culturally sensitive sort key for str1.
      Dim sc3 As SortKey = enus.CompareInfo.GetSortKey(str1)
      ' Create a culturally sensitive sort key for str1.
      Dim sc4 As SortKey = enus.CompareInfo.GetSortKey(str2)

      ' Compare the two sort keys and display the results.
      Dim result2 As Integer = SortKey.Compare(sc3, sc4)
      Console.WriteLine("When the CurrentCulture is ""en-US"",")
      Console.WriteLine("the result of comparing {0} with {1} is: {2}", 
                        str1, str2, result2)
   End Sub
End Class
' The example displays the following output:
'       When the  current culture is "da-DK",
'       the result of comparing Apple with Æble is: -1
'       
'       When the CurrentCulture is "en-US",
'       the result of comparing Apple with Æble is: 1
using System;
using System.Threading;
using System.Globalization;

public class SortKeySample 
{
   public static void Main(String[] args) 
   {
      String str1 = "Apple";
      String str2 = "Æble";

      // Set the CurrentCulture to "da-DK".
      CultureInfo dk = new CultureInfo("da-DK");
      Thread.CurrentThread.CurrentCulture = dk;

      // Create a culturally sensitive sort key for str1.
      SortKey sc1 = dk.CompareInfo.GetSortKey(str1);
      // Create a culturally sensitive sort key for str2.
      SortKey sc2 = dk.CompareInfo.GetSortKey(str2);

      // Compare the two sort keys and display the results.
      int result1 = SortKey.Compare(sc1, sc2);
      Console.WriteLine("When the CurrentCulture is \"da-DK\",");
      Console.WriteLine("the result of comparing {0} with {1} is: {2}\n", 
                        str1, str2, result1);

      // Set the CurrentCulture to "en-US".
      CultureInfo enus = new CultureInfo("en-US");
      Thread.CurrentThread.CurrentCulture = enus ;

      // Create a culturally sensitive sort key for str1.
      SortKey sc3 = enus.CompareInfo.GetSortKey(str1);
      // Create a culturally sensitive sort key for str1.
      SortKey sc4 = enus.CompareInfo.GetSortKey(str2);

      // Compare the two sort keys and display the results.
      int result2 = SortKey.Compare(sc3, sc4);
      Console.WriteLine("When the CurrentCulture is \"en-US\",");
      Console.WriteLine("the result of comparing {0} with {1} is: {2}", 
                        str1, str2, result2);
   }
}
// The example displays the following output:
//       When the CurrentCulture is "da-DK",
//       the result of comparing Apple with Æble is: -1
//       
//       When the CurrentCulture is "en-US",
//       the result of comparing Apple with Æble is: 1

Нормализация

Можно привести строки к верхнему или нижнему регистру перед их сортировкой. Правила для сортировки и преобразования регистра строк являются зависимыми от языка, и правила различаются даже внутри языков, основанных на латинице. Только несколько языков (включая английский) обеспечивают совпадение порядка сортировки с порядком кодовых точек (например A [65] идет перед B [66]). Поэтому не следует полагаться на кодовые точки для выполнения точной сортировки и сравнения строк.

Платформа .NET Framework поддерживает все формы нормализации Юникода, а не предоставляет определенную форму нормализации. Пользователь отвечает за выбор подходящей нормализация для приложений.

Нормализация строки Дополнительные сведения о см. в разделе «по» в разделе класса String.

См. также

Основные понятия

Строковые операции, не зависящие от языка и региональных параметров

Другие ресурсы

Глобализация и локализация приложений .NET Framework