String.Normalize Metoda

Definicja

Zwraca nowy ciąg, którego reprezentacja binarna jest w określonym formularzu normalizacji Unicode.

Przeciążenia

Normalize()

Zwraca nowy ciąg, którego wartość tekstowa jest taka sama jak ten ciąg, ale której reprezentacja binarna znajduje się w postaci normalizacji Unicode C.

Normalize(NormalizationForm)

Zwraca nowy ciąg, którego wartość tekstowa jest taka sama jak ten ciąg, ale której reprezentacja binarna znajduje się w określonej formie normalizacji Unicode.

Przykłady

Poniższy przykład normalizuje ciąg do każdego z czterech formularzy normalizacji, potwierdza, że ciąg został znormalizowany do określonego formularza normalizacji, a następnie wyświetla listę punktów kodu w znormalizowanym ciągu.

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()

Źródło:
String.cs
Źródło:
String.cs
Źródło:
String.cs

Zwraca nowy ciąg, którego wartość tekstowa jest taka sama jak ten ciąg, ale której reprezentacja binarna znajduje się w postaci normalizacji Unicode C.

public string Normalize ();

Zwraca

Nowy, znormalizowany ciąg, którego wartość tekstowa jest taka sama jak ten ciąg, ale której reprezentacja binarna jest w postaci normalizacji C.

Wyjątki

Bieżące wystąpienie zawiera nieprawidłowe znaki Unicode.

Uwagi

Niektóre znaki Unicode mają wiele równoważnych reprezentacji binarnych, składających się z zestawów łączonych i/lub złożonych znaków Unicode. Na przykład dowolny z następujących punktów kodu może reprezentować literę "ắ":

  • U+1EAF

  • U+0103 U+0301

  • U+0061 U+0306 U+0301

Istnienie wielu reprezentacji dla pojedynczego znaku komplikuje wyszukiwanie, sortowanie, dopasowanie i inne operacje.

W standardzie Unicode definiuje się proces zwany normalizacją, która zwraca jedną reprezentację binarną, gdy podano którąkolwiek z równoważnych reprezentacji binarnych znaku. Normalizację można wykonać za pomocą wielu algorytmów, nazywanych formularzami normalizacji, które spełniają różne reguły. Platforma .NET obsługuje cztery formularze normalizacji (C, D, KC i KD), które są definiowane przez standard Unicode. Gdy dwa ciągi są reprezentowane w tym samym formularzu normalizacji, można je porównać przy użyciu porównania porządkowego.

Aby znormalizować i porównać dwa ciągi, wykonaj następujące czynności:

  1. Uzyskaj ciągi do porównania ze źródła wejściowego, takiego jak plik lub urządzenie wejściowe użytkownika.

  2. Wywołaj metodę Normalize() , aby znormalizować ciągi do normalizacji formularza C.

  3. Aby porównać dwa ciągi, wywołaj metodę, która obsługuje porównanie ciągów porządkowych, takich jak Compare(String, String, StringComparison) metoda, i podaj wartość StringComparison.Ordinal lub StringComparison.OrdinalIgnoreCase jako StringComparison argument. Aby posortować tablicę znormalizowanych ciągów, przekaż comparer wartość StringComparer.Ordinal lub StringComparer.OrdinalIgnoreCase do odpowiedniego przeciążenia .Array.Sort

  4. Emituj ciągi w posortowanych danych wyjściowych na podstawie kolejności wskazanej przez poprzedni krok.

Aby uzyskać opis obsługiwanych formularzy normalizacji Unicode, zobacz System.Text.NormalizationForm.

Uwagi dotyczące wywoływania

Metoda IsNormalized jest zwracana false zaraz po napotkaniu pierwszego nienormalizowanego znaku w ciągu. W związku z tym, jeśli ciąg zawiera nienormalizowane znaki, po których następuje nieprawidłowe znaki Unicode, Normalize metoda zwróci ArgumentException wartość , chociaż IsNormalized zwraca falsewartość .

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.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)

Źródło:
String.cs
Źródło:
String.cs
Źródło:
String.cs

Zwraca nowy ciąg, którego wartość tekstowa jest taka sama jak ten ciąg, ale której reprezentacja binarna znajduje się w określonej formie normalizacji Unicode.

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

Parametry

normalizationForm
NormalizationForm

Formularz normalizacji Unicode.

Zwraca

Nowy ciąg, którego wartość tekstowa jest taka sama jak ten ciąg, ale której reprezentacja binarna znajduje się w formie normalizacji określonej przez normalizationForm parametr .

Wyjątki

Bieżące wystąpienie zawiera nieprawidłowe znaki Unicode.

Uwagi

Niektóre znaki Unicode mają wiele równoważnych reprezentacji binarnych, składających się z zestawów łączonych i/lub złożonych znaków Unicode. Istnienie wielu reprezentacji dla pojedynczego znaku komplikuje wyszukiwanie, sortowanie, dopasowanie i inne operacje.

W standardzie Unicode definiuje się proces zwany normalizacją, która zwraca jedną reprezentację binarną, gdy podano którąkolwiek z równoważnych reprezentacji binarnych znaku. Normalizację można wykonać za pomocą wielu algorytmów, nazywanych formularzami normalizacji, które spełniają różne reguły. Platforma .NET obsługuje cztery formularze normalizacji (C, D, KC i KD), które są definiowane przez standard Unicode. Gdy dwa ciągi są reprezentowane w tym samym formularzu normalizacji, można je porównać przy użyciu porównania porządkowego.

Aby znormalizować i porównać dwa ciągi, wykonaj następujące czynności:

  1. Uzyskaj ciągi do porównania ze źródła wejściowego, takiego jak plik lub urządzenie wejściowe użytkownika.

  2. Wywołaj metodę, Normalize(NormalizationForm) aby znormalizować ciągi do określonego formularza normalizacji.

  3. Aby porównać dwa ciągi, wywołaj metodę, która obsługuje porównanie ciągów porządkowych, takich jak Compare(String, String, StringComparison) metoda, i podaj wartość StringComparison.Ordinal lub StringComparison.OrdinalIgnoreCase jako StringComparison argument. Aby posortować tablicę znormalizowanych ciągów, przekaż comparer wartość StringComparer.Ordinal lub StringComparer.OrdinalIgnoreCase do odpowiedniego przeciążenia .Array.Sort

  4. Emituj ciągi w posortowanych danych wyjściowych na podstawie kolejności wskazanej przez poprzedni krok.

Aby uzyskać opis obsługiwanych formularzy normalizacji Unicode, zobacz System.Text.NormalizationForm.

Uwagi dotyczące wywoływania

Metoda IsNormalized jest zwracana false zaraz po napotkaniu pierwszego nienormalizowanego znaku w ciągu. W związku z tym, jeśli ciąg zawiera nienormalizowane znaki, po których następuje nieprawidłowe znaki Unicode, Normalize metoda może zgłaszać ArgumentException wartość , chociaż IsNormalized zwraca falsewartość .

Zobacz też

Dotyczy

.NET 9 i inne wersje
Produkt Wersje
.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