String.Normalize Methode

Definitie

Retourneert een nieuwe tekenreeks waarvan de binaire weergave een bepaalde Unicode-normalisatievorm heeft.

Overloads

Name Description
Normalize()

Retourneert een nieuwe tekenreeks waarvan de tekstwaarde hetzelfde is als deze tekenreeks, maar waarvan de binaire weergave zich in Unicode-normalisatievorm C bevindt.

Normalize(NormalizationForm)

Retourneert een nieuwe tekenreeks waarvan de tekstwaarde hetzelfde is als deze tekenreeks, maar waarvan de binaire weergave zich in de opgegeven Unicode-normalisatievorm bevindt.

Voorbeelden

In het volgende voorbeeld wordt een tekenreeks genormaliseerd naar elk van de vier normalisatieformulieren, wordt bevestigd dat de tekenreeks is genormaliseerd in het opgegeven normalisatieformulier en worden de codepunten in de genormaliseerde tekenreeks weergegeven.

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

Retourneert een nieuwe tekenreeks waarvan de tekstwaarde hetzelfde is als deze tekenreeks, maar waarvan de binaire weergave zich in Unicode-normalisatievorm C bevindt.

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

Retouren

Een nieuwe, genormaliseerde tekenreeks waarvan de tekstwaarde hetzelfde is als deze tekenreeks, maar waarvan de binaire weergave zich in normalisatievorm C bevindt.

Uitzonderingen

Het huidige exemplaar bevat ongeldige Unicode-tekens.

Opmerkingen

Sommige Unicode-tekens hebben meerdere equivalente binaire weergaven die bestaan uit sets combinaties en/of samengestelde Unicode-tekens. Een van de volgende codepunten kan bijvoorbeeld de letter 'ắ' vertegenwoordigen:

  • U+1EAF

  • U+0103 U+0301

  • U+0061 U+0306 U+0301

Het bestaan van meerdere representaties voor één teken maakt het zoeken, sorteren, vergelijken en andere bewerkingen ingewikkeld.

De Unicode-standaard definieert een proces met de naam normalisatie dat één binaire weergave retourneert wanneer een van de equivalente binaire representaties van een teken wordt gegeven. Normalisatie kan worden uitgevoerd met verschillende algoritmen, normalisatievormen genoemd, die verschillende regels volgen. .NET ondersteunt de vier normalisatievormen (C, D, KC en KD) die zijn gedefinieerd door de Unicode-standaard. Wanneer twee tekenreeksen in dezelfde normalisatievorm worden weergegeven, kunnen ze worden vergeleken met behulp van een rangtelvergelijking.

Ga als volgt te werk om twee tekenreeksen te normaliseren en te vergelijken:

  1. Haal de tekenreeksen op die moeten worden vergeleken vanuit een invoerbron, zoals een bestand of een apparaat voor gebruikersinvoer.

  2. Roep de Normalize() methode aan om de tekenreeksen te normaliseren naar normalisatieformulier C.

  3. Als u twee tekenreeksen wilt vergelijken, roept u een methode aan die ondersteuning biedt voor rangtelreeksvergelijking, zoals de Compare(String, String, StringComparison) methode, en geeft u een waarde van StringComparison.Ordinal of StringComparison.OrdinalIgnoreCase als argument StringComparison op. Als u een matrix van genormaliseerde tekenreeksen wilt sorteren, geeft u een comparer waarde van StringComparer.Ordinal of StringComparer.OrdinalIgnoreCase aan een juiste overbelasting van Array.Sort.

  4. De tekenreeksen verzenden in de gesorteerde uitvoer op basis van de volgorde die in de vorige stap is aangegeven.

Zie voor een beschrijving van ondersteunde Unicode-normalisatieformulieren System.Text.NormalizationForm.

Notities voor bellers

De IsNormalized methode retourneert false zodra het eerste niet-genormaliseerde teken in een tekenreeks tegenkomt. Als een tekenreeks dus niet-genormaliseerde tekens bevat, gevolgd door ongeldige Unicode-tekens, genereert de Normalize methode een ArgumentException hoewel IsNormalized retourneert false.

Zie ook

Van toepassing op

Normalize(NormalizationForm)

Retourneert een nieuwe tekenreeks waarvan de tekstwaarde hetzelfde is als deze tekenreeks, maar waarvan de binaire weergave zich in de opgegeven Unicode-normalisatievorm bevindt.

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

Parameters

normalizationForm
NormalizationForm

Een Unicode-normalisatieformulier.

Retouren

Een nieuwe tekenreeks waarvan de tekstuele waarde hetzelfde is als deze tekenreeks, maar waarvan de binaire weergave zich in de normalisatievorm bevindt die is opgegeven door de normalizationForm parameter.

Uitzonderingen

Het huidige exemplaar bevat ongeldige Unicode-tekens.

Opmerkingen

Sommige Unicode-tekens hebben meerdere equivalente binaire weergaven die bestaan uit sets combinaties en/of samengestelde Unicode-tekens. Het bestaan van meerdere representaties voor één teken maakt het zoeken, sorteren, vergelijken en andere bewerkingen ingewikkeld.

De Unicode-standaard definieert een proces met de naam normalisatie dat één binaire weergave retourneert wanneer een van de equivalente binaire representaties van een teken wordt gegeven. Normalisatie kan worden uitgevoerd met verschillende algoritmen, normalisatievormen genoemd, die verschillende regels volgen. .NET ondersteunt de vier normalisatievormen (C, D, KC en KD) die zijn gedefinieerd door de Unicode-standaard. Wanneer twee tekenreeksen in dezelfde normalisatievorm worden weergegeven, kunnen ze worden vergeleken met behulp van een rangtelvergelijking.

Ga als volgt te werk om twee tekenreeksen te normaliseren en te vergelijken:

  1. Haal de tekenreeksen op die moeten worden vergeleken vanuit een invoerbron, zoals een bestand of een apparaat voor gebruikersinvoer.

  2. Roep de Normalize(NormalizationForm) methode aan om de tekenreeksen te normaliseren naar een opgegeven normalisatieformulier.

  3. Als u twee tekenreeksen wilt vergelijken, roept u een methode aan die ondersteuning biedt voor rangtelreeksvergelijking, zoals de Compare(String, String, StringComparison) methode, en geeft u een waarde van StringComparison.Ordinal of StringComparison.OrdinalIgnoreCase als argument StringComparison op. Als u een matrix van genormaliseerde tekenreeksen wilt sorteren, geeft u een comparer waarde van StringComparer.Ordinal of StringComparer.OrdinalIgnoreCase aan een juiste overbelasting van Array.Sort.

  4. De tekenreeksen verzenden in de gesorteerde uitvoer op basis van de volgorde die in de vorige stap is aangegeven.

Zie voor een beschrijving van ondersteunde Unicode-normalisatieformulieren System.Text.NormalizationForm.

Notities voor bellers

De IsNormalized methode retourneert false zodra het eerste niet-genormaliseerde teken in een tekenreeks tegenkomt. Als een tekenreeks dus niet-genormaliseerde tekens bevat, gevolgd door ongeldige Unicode-tekens, kan de Normalize methode een ArgumentException hoewel IsNormalized geretourneerde falsemethode genereren.

Zie ook

Van toepassing op