String.Normalize Yöntem

Tanım

İkili gösterimi belirli bir Unicode normalleştirme formunda olan yeni bir dize döndürür.

Aşırı Yüklemeler

Name Description
Normalize()

Metin değeri bu dizeyle aynı olan ancak ikili gösterimi C Unicode normalleştirme formunda olan yeni bir dize döndürür.

Normalize(NormalizationForm)

Metin değeri bu dizeyle aynı olan ancak ikili gösterimi belirtilen Unicode normalleştirme formunda olan yeni bir dize döndürür.

Örnekler

Aşağıdaki örnek, dört normalleştirme formunun her birine yönelik bir dizeyi normalleştirir, dizenin belirtilen normalleştirme formuna normalleştirildiğini onaylar ve ardından normalleştirilmiş dizedeki kod noktalarını listeler.

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

Kaynak:
String.cs
Kaynak:
String.cs
Kaynak:
String.cs
Kaynak:
String.cs
Kaynak:
String.cs

Metin değeri bu dizeyle aynı olan ancak ikili gösterimi C Unicode normalleştirme formunda olan yeni bir dize döndürür.

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

Döndürülenler

Metin değeri bu dizeyle aynı olan ancak ikili gösterimi C normalleştirme biçiminde olan yeni, normalleştirilmiş bir dize.

Özel durumlar

Geçerli örnek geçersiz Unicode karakterleri içeriyor.

Açıklamalar

Bazı Unicode karakterleri, birleştirme ve/veya bileşik Unicode karakter kümelerinden oluşan birden çok eşdeğer ikili gösterime sahiptir. Örneğin, aşağıdaki kod noktalarından herhangi biri "ắ" harfini temsil edebilir:

  • U+1EAF

  • U+0103 U+0301

  • U+0061 U+0306 U+0301

Tek bir karakter için birden çok gösterimin varlığı arama, sıralama, eşleştirme ve diğer işlemleri karmaşıklaştırır.

Unicode standardı, bir karakterin eşdeğer ikili gösterimlerinden herhangi biri verildiğinde bir ikili gösterim döndüren normalleştirme adlı bir işlemi tanımlar. Normalleştirme, normalleştirme formları olarak adlandırılan ve farklı kurallara uyan çeşitli algoritmalarla gerçekleştirilebilir. .NET Unicode standardı tarafından tanımlanan dört normalleştirme formu (C, D, KC ve KD) destekler. İki dize aynı normalleştirme biçiminde temsil edildiğinde sıralı karşılaştırma kullanılarak karşılaştırılabilir.

İki dizeyi normalleştirmek ve karşılaştırmak için aşağıdakileri yapın:

  1. Dosya veya kullanıcı giriş cihazı gibi bir giriş kaynağından karşılaştırılacak dizeleri alın.

  2. C biçimindeki Normalize() dizeleri normalleştirmek için yöntemini çağırın.

  3. İki dizeyi karşılaştırmak için, yöntemi gibi sıralı dize karşılaştırmasını destekleyen bir yöntem çağırın Compare(String, String, StringComparison) ve veya StringComparison.Ordinal bağımsız değişkeni olarak StringComparison.OrdinalIgnoreCase bir değer StringComparison sağlayın. Bir dizi normalleştirilmiş dizeyi sıralamak için veya değerini comparerStringComparer.Ordinal uygun bir aşırı yüklemesine StringComparer.OrdinalIgnoreCasegeçirinArray.Sort.

  4. Sıralanmış çıktıdaki dizeleri, önceki adımla belirtilen düzene göre yayın.

Desteklenen Unicode normalleştirme formlarının açıklaması için bkz System.Text.NormalizationForm. .

Arayanlara Notlar

yöntemi, IsNormalized bir dizedeki ilk normalleştirilmemiş karakterle karşılaştığı anda döndürür false . Bu nedenle, bir dizede normalleştirilmemiş karakterler ve ardından geçersiz Unicode karakterleri varsa, Normalize yöntemi döndürse ArgumentExceptionde IsNormalized bir false oluşturur.

Ayrıca bkz.

Şunlara uygulanır

Normalize(NormalizationForm)

Kaynak:
String.cs
Kaynak:
String.cs
Kaynak:
String.cs
Kaynak:
String.cs
Kaynak:
String.cs

Metin değeri bu dizeyle aynı olan ancak ikili gösterimi belirtilen Unicode normalleştirme formunda olan yeni bir dize döndürür.

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

Parametreler

normalizationForm
NormalizationForm

Unicode normalleştirme formu.

Döndürülenler

Metin değeri bu dizeyle aynı olan ancak ikili gösterimi parametresi tarafından normalizationForm belirtilen normalleştirme formunda olan yeni bir dize.

Özel durumlar

Geçerli örnek geçersiz Unicode karakterleri içeriyor.

Açıklamalar

Bazı Unicode karakterleri, birleştirme ve/veya bileşik Unicode karakter kümelerinden oluşan birden çok eşdeğer ikili gösterime sahiptir. Tek bir karakter için birden çok gösterimin varlığı arama, sıralama, eşleştirme ve diğer işlemleri karmaşıklaştırır.

Unicode standardı, bir karakterin eşdeğer ikili gösterimlerinden herhangi biri verildiğinde bir ikili gösterim döndüren normalleştirme adlı bir işlemi tanımlar. Normalleştirme, normalleştirme formları olarak adlandırılan ve farklı kurallara uyan çeşitli algoritmalarla gerçekleştirilebilir. .NET Unicode standardı tarafından tanımlanan dört normalleştirme formu (C, D, KC ve KD) destekler. İki dize aynı normalleştirme biçiminde temsil edildiğinde sıralı karşılaştırma kullanılarak karşılaştırılabilir.

İki dizeyi normalleştirmek ve karşılaştırmak için aşağıdakileri yapın:

  1. Dosya veya kullanıcı giriş cihazı gibi bir giriş kaynağından karşılaştırılacak dizeleri alın.

  2. Normalize(NormalizationForm) Dizeleri belirtilen normalleştirme formuna normalleştirmek için yöntemini çağırın.

  3. İki dizeyi karşılaştırmak için, yöntemi gibi sıralı dize karşılaştırmasını destekleyen bir yöntem çağırın Compare(String, String, StringComparison) ve veya StringComparison.Ordinal bağımsız değişkeni olarak StringComparison.OrdinalIgnoreCase bir değer StringComparison sağlayın. Bir dizi normalleştirilmiş dizeyi sıralamak için veya değerini comparerStringComparer.Ordinal uygun bir aşırı yüklemesine StringComparer.OrdinalIgnoreCasegeçirinArray.Sort.

  4. Sıralanmış çıktıdaki dizeleri, önceki adımla belirtilen düzene göre yayın.

Desteklenen Unicode normalleştirme formlarının açıklaması için bkz System.Text.NormalizationForm. .

Arayanlara Notlar

yöntemi, IsNormalized bir dizedeki ilk normalleştirilmemiş karakterle karşılaştığı anda döndürür false . Bu nedenle, bir dizede normalleştirilmemiş karakterler ve ardından geçersiz Unicode karakterleri varsa, Normalize yöntemi döndürse ArgumentExceptionde IsNormalized bir false atabilir.

Ayrıca bkz.

Şunlara uygulanır