Прочитать на английском

Поделиться через


String.Normalize Метод

Определение

Возвращает новую строку, двоичное представление которой находится в определенной нормализованной форме Юникода.

Перегрузки

Normalize()

Возвращает новую строку, текстовое значение которой совпадает с данной строкой, а двоичное представление находится в нормализованной форме C Юникода.

Normalize(NormalizationForm)

Возвращает новую строку, текстовое значение которой совпадает с данной строкой, а двоичное представление находится в заданной нормализованной форме Юникода.

Примеры

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

C#
using System;
using System.Text;

class Example
{
    public static void Main()
    {
       // Character c; combining characters acute and cedilla; character 3/4
       string s1 = new String( new char[] {'\u0063', '\u0301', '\u0327', '\u00BE'});
       string s2 = null;
       string divider = new String('-', 80);
       divider = String.Concat(Environment.NewLine, divider, Environment.NewLine);

       Show("s1", s1);
       Console.WriteLine();
       Console.WriteLine("U+0063 = LATIN SMALL LETTER C");
       Console.WriteLine("U+0301 = COMBINING ACUTE ACCENT");
       Console.WriteLine("U+0327 = COMBINING CEDILLA");
       Console.WriteLine("U+00BE = VULGAR FRACTION THREE QUARTERS");
       Console.WriteLine(divider);

       Console.WriteLine("A1) Is s1 normalized to the default form (Form C)?: {0}",
                                    s1.IsNormalized());
       Console.WriteLine("A2) Is s1 normalized to Form C?:  {0}",
                                    s1.IsNormalized(NormalizationForm.FormC));
       Console.WriteLine("A3) Is s1 normalized to Form D?:  {0}",
                                    s1.IsNormalized(NormalizationForm.FormD));
       Console.WriteLine("A4) Is s1 normalized to Form KC?: {0}",
                                    s1.IsNormalized(NormalizationForm.FormKC));
       Console.WriteLine("A5) Is s1 normalized to Form KD?: {0}",
                                    s1.IsNormalized(NormalizationForm.FormKD));

       Console.WriteLine(divider);

       Console.WriteLine("Set string s2 to each normalized form of string s1.");
       Console.WriteLine();
       Console.WriteLine("U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE");
       Console.WriteLine("U+0033 = DIGIT THREE");
       Console.WriteLine("U+2044 = FRACTION SLASH");
       Console.WriteLine("U+0034 = DIGIT FOUR");
       Console.WriteLine(divider);

       s2 = s1.Normalize();
       Console.Write("B1) Is s2 normalized to the default form (Form C)?: ");
       Console.WriteLine(s2.IsNormalized());
       Show("s2", s2);
       Console.WriteLine();

       s2 = s1.Normalize(NormalizationForm.FormC);
       Console.Write("B2) Is s2 normalized to Form C?: ");
       Console.WriteLine(s2.IsNormalized(NormalizationForm.FormC));
       Show("s2", s2);
       Console.WriteLine();

       s2 = s1.Normalize(NormalizationForm.FormD);
       Console.Write("B3) Is s2 normalized to Form D?: ");
       Console.WriteLine(s2.IsNormalized(NormalizationForm.FormD));
       Show("s2", s2);
       Console.WriteLine();

       s2 = s1.Normalize(NormalizationForm.FormKC);
       Console.Write("B4) Is s2 normalized to Form KC?: ");
       Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKC));
       Show("s2", s2);
       Console.WriteLine();

       s2 = s1.Normalize(NormalizationForm.FormKD);
       Console.Write("B5) Is s2 normalized to Form KD?: ");
       Console.WriteLine(s2.IsNormalized(NormalizationForm.FormKD));
       Show("s2", s2);
       Console.WriteLine();
    }

    private static void Show(string title, string s)
    {
       Console.Write("Characters in string {0} = ", title);
       foreach(short x in s) {
           Console.Write("{0:X4} ", x);
       }
       Console.WriteLine();
    }
}
/*
This example produces the following results:

Characters in string s1 = 0063 0301 0327 00BE

U+0063 = LATIN SMALL LETTER C
U+0301 = COMBINING ACUTE ACCENT
U+0327 = COMBINING CEDILLA
U+00BE = VULGAR FRACTION THREE QUARTERS

--------------------------------------------------------------------------------

A1) Is s1 normalized to the default form (Form C)?: False
A2) Is s1 normalized to Form C?:  False
A3) Is s1 normalized to Form D?:  False
A4) Is s1 normalized to Form KC?: False
A5) Is s1 normalized to Form KD?: False

--------------------------------------------------------------------------------

Set string s2 to each normalized form of string s1.

U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
U+0033 = DIGIT THREE
U+2044 = FRACTION SLASH
U+0034 = DIGIT FOUR

--------------------------------------------------------------------------------

B1) Is s2 normalized to the default form (Form C)?: True
Characters in string s2 = 1E09 00BE

B2) Is s2 normalized to Form C?: True
Characters in string s2 = 1E09 00BE

B3) Is s2 normalized to Form D?: True
Characters in string s2 = 0063 0327 0301 00BE

B4) Is s2 normalized to Form KC?: True
Characters in string s2 = 1E09 0033 2044 0034

B5) Is s2 normalized to Form KD?: True
Characters in string s2 = 0063 0327 0301 0033 2044 0034

*/

Normalize()

Исходный код:
String.cs
Исходный код:
String.cs
Исходный код:
String.cs

Возвращает новую строку, текстовое значение которой совпадает с данной строкой, а двоичное представление находится в нормализованной форме C Юникода.

C#
public string Normalize ();

Возвращаемое значение

Новая нормализованная строка, текстовое значение которой совпадает с данной строкой, а двоичное представление находится в нормализованной форме C Юникода.

Исключения

Текущий экземпляр содержит недопустимые символы Юникода.

Комментарии

Некоторые символы Юникода имеют несколько эквивалентных двоичных представлений, состоящих из наборов комбинирующих и (или) составных символов Юникода. Например, любая из следующих кодовых точек может представлять букву "ắ":

  • U+1EAF

  • U+0103 U+0301

  • U+0061 U+0306 U+0301

Наличие нескольких представлений для одного символа усложняет поиск, сортировку, сопоставление и другие операции.

Стандарт Юникода определяет процесс, называемый нормализацией, который возвращает одно двоичное представление при получении любого из эквивалентных двоичных представлений символа. Нормализация может выполняться с помощью нескольких алгоритмов, называемых формами нормализации, которые подчиняются различным правилам. .NET поддерживает четыре формы нормализации (C, D, KC и KD), определенные стандартом Юникода. Если две строки представлены в одной форме нормализации, их можно сравнить с помощью порядкового сравнения.

Чтобы нормализовать и сравнить две строки, сделайте следующее:

  1. Получите строки для сравнения из источника входных данных, такого как файл или устройство ввода пользователя.

  2. Вызовите метод для Normalize() нормализации строк в форме C.

  3. Чтобы сравнить две строки, вызовите метод, поддерживающий порядковое сравнение строк, например Compare(String, String, StringComparison) метод , и укажите значение StringComparison.Ordinal или StringComparison.OrdinalIgnoreCase в качестве аргумента StringComparison . Чтобы отсортировать массив нормализованных строк, передайте comparer значение StringComparer.Ordinal или StringComparer.OrdinalIgnoreCase в соответствующую перегрузку Array.Sort.

  4. Испускайте строки в отсортированных выходных данных в соответствии с порядком, указанным на предыдущем шаге.

Описание поддерживаемых форм нормализации Юникода см. в разделе System.Text.NormalizationForm.

Примечания для тех, кто вызывает этот метод

Метод IsNormalized возвращается false , как только обнаруживает первый ненормализованный символ в строке. Таким образом, если строка содержит ненормализованные символы, за которыми следуют недопустимые символы Юникода Normalize , метод вызовет , ArgumentException хотя IsNormalized возвращает false.

См. также раздел

Применяется к

.NET 9 и другие версии
Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Normalize(NormalizationForm)

Исходный код:
String.cs
Исходный код:
String.cs
Исходный код:
String.cs

Возвращает новую строку, текстовое значение которой совпадает с данной строкой, а двоичное представление находится в заданной нормализованной форме Юникода.

C#
public string Normalize (System.Text.NormalizationForm normalizationForm);

Параметры

normalizationForm
NormalizationForm

Форма нормализации Юникода.

Возвращаемое значение

Новая строка, текстовое значение которой совпадает с данной строкой, а двоичное представление находится в форме нормализации, заданной в параметре normalizationForm.

Исключения

Текущий экземпляр содержит недопустимые символы Юникода.

Комментарии

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

Стандарт Юникода определяет процесс, называемый нормализацией, который возвращает одно двоичное представление при получении любого из эквивалентных двоичных представлений символа. Нормализация может выполняться с помощью нескольких алгоритмов, называемых формами нормализации, которые подчиняются различным правилам. .NET поддерживает четыре формы нормализации (C, D, KC и KD), определенные стандартом Юникода. Если две строки представлены в одной форме нормализации, их можно сравнить с помощью порядкового сравнения.

Чтобы нормализовать и сравнить две строки, сделайте следующее:

  1. Получите строки для сравнения из источника входных данных, такого как файл или устройство ввода пользователя.

  2. Вызовите метод , Normalize(NormalizationForm) чтобы нормализовать строки до указанной формы нормализации.

  3. Чтобы сравнить две строки, вызовите метод, поддерживающий порядковое сравнение строк, например Compare(String, String, StringComparison) метод , и укажите значение StringComparison.Ordinal или StringComparison.OrdinalIgnoreCase в качестве аргумента StringComparison . Чтобы отсортировать массив нормализованных строк, передайте comparer значение StringComparer.Ordinal или StringComparer.OrdinalIgnoreCase в соответствующую перегрузку Array.Sort.

  4. Испускайте строки в отсортированных выходных данных в соответствии с порядком, указанным на предыдущем шаге.

Описание поддерживаемых форм нормализации Юникода см. в разделе System.Text.NormalizationForm.

Примечания для тех, кто вызывает этот метод

Метод IsNormalized возвращается false , как только обнаруживает первый ненормализованный символ в строке. Таким образом, если строка содержит ненормализованные символы, за которыми следуют недопустимые символы Юникода Normalize , метод может вызвать исключение ArgumentException , хотя IsNormalized возвращает false.

См. также раздел

Применяется к

.NET 9 и другие версии
Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1