String.Normalize Methode

Definition

Gibt eine neue Zeichenfolge zurück, deren binäre Darstellung sich in einer bestimmten Unicode-Normalisierungsform befindet.

Überlädt

Name Beschreibung
Normalize()

Gibt eine neue Zeichenfolge zurück, deren Textwert mit dieser Zeichenfolge identisch ist, deren binäre Darstellung sich jedoch in Unicode normalisierungsform C befindet.

Normalize(NormalizationForm)

Gibt eine neue Zeichenfolge zurück, deren Textwert mit dieser Zeichenfolge identisch ist, deren binäre Darstellung sich jedoch in der angegebenen Unicode-Normalisierungsform befindet.

Beispiele

Im folgenden Beispiel wird eine Zeichenfolge auf jede von vier Normalisierungsformularen normalisiert, bestätigt, dass die Zeichenfolge auf das angegebene Normalisierungsformular normalisiert wurde, und listet dann die Codepunkte in der normalisierten Zeichenfolge auf.

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

*/
open System
open System.Text

let show title (s: string) =
    printf $"Characters in string %s{title} = "
    for x in s do
        printf $"{int16 x:X4} "
    printfn ""


[<EntryPoint>]
let main _ =
    // Character c; combining characters acute and cedilla; character 3/4
    let s1 = String [| '\u0063'; '\u0301'; '\u0327'; '\u00BE' |]
    let divider = String('-', 80)
    let divider = String.Concat(Environment.NewLine, divider, Environment.NewLine)

    show "s1" s1
    printfn "\nU+0063 = LATIN SMALL LETTER C"
    printfn "U+0301 = COMBINING ACUTE ACCENT"
    printfn "U+0327 = COMBINING CEDILLA"
    printfn "U+00BE = VULGAR FRACTION THREE QUARTERS"
    printfn $"{divider}"

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

    printfn $"{divider}"

    printfn "Set string s2 to each normalized form of string s1.\n"
    printfn "U+1E09 = LATIN SMALL LETTER C WITH CEDILLA AND ACUTE"
    printfn"U+0033 = DIGIT THREE"
    printfn"U+2044 = FRACTION SLASH"
    printfn"U+0034 = DIGIT FOUR"
    printfn $"{divider}"
 
    let s2 = s1.Normalize()
    printf "B1) Is s2 normalized to the default form (Form C)?: "
    printfn $"{s2.IsNormalized()}"
    show "s2" s2
    printfn ""

    let s2 = s1.Normalize NormalizationForm.FormC
    printf "B2) Is s2 normalized to Form C?: "
    printfn $"{s2.IsNormalized NormalizationForm.FormC}"
    show "s2" s2
    printfn ""

    let s2 = s1.Normalize NormalizationForm.FormD
    printf "B3) Is s2 normalized to Form D?: "
    printfn $"{s2.IsNormalized NormalizationForm.FormD}"
    show "s2" s2
    printfn ""

    let s2 = s1.Normalize(NormalizationForm.FormKC)
    printf "B4) Is s2 normalized to Form KC?: "
    printfn $"{s2.IsNormalized NormalizationForm.FormKC}"
    show "s2" s2
    printfn ""

    let s2 = s1.Normalize(NormalizationForm.FormKD)
    printf "B5) Is s2 normalized to Form KD?: "
    printfn $"{s2.IsNormalized NormalizationForm.FormKD}"
    show "s2" s2
    0

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

*)
Imports System.Text

Class Example
   Public Shared Sub Main()
      ' Character c; combining characters acute and cedilla; character 3/4
      Dim s1 = New [String](New Char() {ChrW(&H0063), ChrW(&H0301), ChrW(&H0327), ChrW(&H00BE)})
      Dim s2 As String = Nothing
      Dim divider = New [String]("-"c, 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()
   End Sub 
   
   Private Shared Sub Show(title As String, s As String)
      Console.Write("Characters in string {0} = ", title)
      For Each x As Char In s
         Console.Write("{0:X4} ", AscW(x))
      Next 
      Console.WriteLine()
   End Sub 
End Class 
'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()

Gibt eine neue Zeichenfolge zurück, deren Textwert mit dieser Zeichenfolge identisch ist, deren binäre Darstellung sich jedoch in Unicode normalisierungsform C befindet.

public:
 System::String ^ Normalize();
public string Normalize();
member this.Normalize : unit -> string
Public Function Normalize () As String

Gibt zurück

Eine neue, normalisierte Zeichenfolge, deren Textwert mit dieser Zeichenfolge identisch ist, deren binäre Darstellung sich jedoch in Normalisierungsform C befindet.

Ausnahmen

Die aktuelle Instanz enthält ungültige Unicode-Zeichen.

Hinweise

Einige Unicode-Zeichen weisen mehrere gleichwertige binäre Darstellungen auf, die aus Kombinations- und/oder zusammengesetzten Unicode-Zeichen bestehen. Beispielsweise kann jeder der folgenden Codepunkte den Buchstaben "ắ" darstellen:

  • U+1EAF

  • U+0103 U+0301

  • U+0061 U+0306 U+0301

Das Vorhandensein mehrerer Darstellungen für ein einzelnes Zeichen erschwert das Suchen, Sortieren, Abgleichen und andere Vorgänge.

Der Unicode-Standard definiert einen Prozess namens Normalisierung, der eine binäre Darstellung zurückgibt, wenn eine der entsprechenden binären Darstellungen eines Zeichens angegeben wird. Normalisierung kann mit mehreren Algorithmen durchgeführt werden, die als Normalisierungsformulare bezeichnet werden, die verschiedenen Regeln entsprechen. .NET unterstützt die vier Normalisierungsformulare (C, D, KC und KD), die vom Unicode-Standard definiert sind. Wenn zwei Zeichenfolgen in derselben Normalisierungsform dargestellt werden, können sie mithilfe eines Ordinalvergleichs verglichen werden.

Gehen Sie wie folgt vor, um zwei Zeichenfolgen zu normalisieren und zu vergleichen:

  1. Rufen Sie die Zeichenfolgen ab, die von einer Eingabequelle verglichen werden sollen, z. B. eine Datei oder ein Benutzereingabegerät.

  2. Rufen Sie die Normalize() Methode auf, um die Zeichenfolgen in Normalisierungsform C zu normalisieren.

  3. Um zwei Zeichenfolgen zu vergleichen, rufen Sie eine Methode auf, die ordinale Zeichenfolgenvergleiche unterstützt, z. B. die Compare(String, String, StringComparison) Methode, und geben Sie einen Wert von StringComparison.Ordinal oder StringComparison.OrdinalIgnoreCase als StringComparison Argument an. Um ein Array normalisierter Zeichenfolgen zu sortieren, übergeben Sie einen comparer Wert von StringComparer.Ordinal oder StringComparer.OrdinalIgnoreCase an eine entsprechende Überladung von Array.Sort.

  4. Geben Sie die Zeichenfolgen in der sortierten Ausgabe basierend auf der im vorherigen Schritt angegebenen Reihenfolge aus.

Eine Beschreibung der unterstützten Unicode-Normalisierungsformulare finden Sie unter System.Text.NormalizationForm.

Hinweise für Aufrufer

Die IsNormalized Methode wird zurückgegeben false , sobald das erste nicht normalisierte Zeichen in einer Zeichenfolge auftritt. Wenn eine Zeichenfolge also nicht normalisierte Zeichen enthält, gefolgt von ungültigen Unicode-Zeichen, löst die Normalize Methode eine obwohl ArgumentException zurückgegebene IsNormalized.false

Weitere Informationen

Gilt für:

Normalize(NormalizationForm)

Gibt eine neue Zeichenfolge zurück, deren Textwert mit dieser Zeichenfolge identisch ist, deren binäre Darstellung sich jedoch in der angegebenen Unicode-Normalisierungsform befindet.

public:
 System::String ^ Normalize(System::Text::NormalizationForm normalizationForm);
public string Normalize(System.Text.NormalizationForm normalizationForm);
member this.Normalize : System.Text.NormalizationForm -> string
Public Function Normalize (normalizationForm As NormalizationForm) As String

Parameter

normalizationForm
NormalizationForm

Ein Unicode-Normalisierungsformular.

Gibt zurück

Eine neue Zeichenfolge, deren Textwert mit dieser Zeichenfolge identisch ist, deren binäre Darstellung sich jedoch in der durch den normalizationForm Parameter angegebenen Normalisierungsform befindet.

Ausnahmen

Die aktuelle Instanz enthält ungültige Unicode-Zeichen.

Hinweise

Einige Unicode-Zeichen weisen mehrere gleichwertige binäre Darstellungen auf, die aus Kombinations- und/oder zusammengesetzten Unicode-Zeichen bestehen. Das Vorhandensein mehrerer Darstellungen für ein einzelnes Zeichen erschwert das Suchen, Sortieren, Abgleichen und andere Vorgänge.

Der Unicode-Standard definiert einen Prozess namens Normalisierung, der eine binäre Darstellung zurückgibt, wenn eine der entsprechenden binären Darstellungen eines Zeichens angegeben wird. Normalisierung kann mit mehreren Algorithmen durchgeführt werden, die als Normalisierungsformulare bezeichnet werden, die verschiedenen Regeln entsprechen. .NET unterstützt die vier Normalisierungsformulare (C, D, KC und KD), die vom Unicode-Standard definiert sind. Wenn zwei Zeichenfolgen in derselben Normalisierungsform dargestellt werden, können sie mithilfe eines Ordinalvergleichs verglichen werden.

Gehen Sie wie folgt vor, um zwei Zeichenfolgen zu normalisieren und zu vergleichen:

  1. Rufen Sie die Zeichenfolgen ab, die von einer Eingabequelle verglichen werden sollen, z. B. eine Datei oder ein Benutzereingabegerät.

  2. Rufen Sie die Normalize(NormalizationForm) Methode auf, um die Zeichenfolgen in ein angegebenes Normalisierungsformular zu normalisieren.

  3. Um zwei Zeichenfolgen zu vergleichen, rufen Sie eine Methode auf, die ordinale Zeichenfolgenvergleiche unterstützt, z. B. die Compare(String, String, StringComparison) Methode, und geben Sie einen Wert von StringComparison.Ordinal oder StringComparison.OrdinalIgnoreCase als StringComparison Argument an. Um ein Array normalisierter Zeichenfolgen zu sortieren, übergeben Sie einen comparer Wert von StringComparer.Ordinal oder StringComparer.OrdinalIgnoreCase an eine entsprechende Überladung von Array.Sort.

  4. Geben Sie die Zeichenfolgen in der sortierten Ausgabe basierend auf der im vorherigen Schritt angegebenen Reihenfolge aus.

Eine Beschreibung der unterstützten Unicode-Normalisierungsformulare finden Sie unter System.Text.NormalizationForm.

Hinweise für Aufrufer

Die IsNormalized Methode wird zurückgegeben false , sobald das erste nicht normalisierte Zeichen in einer Zeichenfolge auftritt. Wenn eine Zeichenfolge also nicht normalisierte Zeichen enthält, gefolgt von ungültigen Unicode-Zeichen, löst die Normalize Methode möglicherweise ein ArgumentException , obwohl IsNormalized zurückgegeben falsewird.

Weitere Informationen

Gilt für: