String.IsNormalized 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示此字串是否屬於特定的 Unicode 正規化形式。
多載
| 名稱 | Description |
|---|---|
| IsNormalized() |
表示此字串是否屬於 Unicode 正規化形式 C。 |
| IsNormalized(NormalizationForm) |
表示此字串是否屬於指定的 Unicode 正規化形式。 |
範例
以下範例判斷字串是否成功正規化為各種正規化形式。
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
'
IsNormalized()
- 來源:
- String.cs
- 來源:
- String.cs
- 來源:
- String.cs
- 來源:
- String.cs
表示此字串是否屬於 Unicode 正規化形式 C。
public:
bool IsNormalized();
public bool IsNormalized();
member this.IsNormalized : unit -> bool
Public Function IsNormalized () As Boolean
傳回
true如果這串是正規化形式 C;否則,。 false
例外狀況
目前的實例包含無效的 Unicode 字元。
備註
某些 Unicode 字元具有多個對等的二進位表示法,由組合和/或複合 Unicode 字元集組成。 單一字元存在多種表示法,會使搜尋、排序、匹配及其他操作變得複雜。
Unicode 標準定義了一個稱為正規化的過程,當給定字元的任何對等二進位表示法時,該表示法會傳回一個二進位表示法。 正規化可以用多種稱為正規化形式(normalization forms)的演算法來完成,這些演算法遵循不同的規則。 .NET 目前支援正規化形式 C、D、KC 和 KD。
關於支援的 Unicode 正規化形式的描述,請參見 System.Text.NormalizationForm。
給呼叫者的注意事項
IsNormalized當方法遇到字串中第一個未正規化字元時,會立即返回false。 因此,若字串包含非正規化字元後接無效 Unicode 字元, Normalize 該方法會拋出 ArgumentException 雖然 IsNormalized 回傳 false。
另請參閱
適用於
IsNormalized(NormalizationForm)
- 來源:
- String.cs
- 來源:
- String.cs
- 來源:
- String.cs
- 來源:
- String.cs
表示此字串是否屬於指定的 Unicode 正規化形式。
public:
bool IsNormalized(System::Text::NormalizationForm normalizationForm);
public bool IsNormalized(System.Text.NormalizationForm normalizationForm);
member this.IsNormalized : System.Text.NormalizationForm -> bool
Public Function IsNormalized (normalizationForm As NormalizationForm) As Boolean
參數
- normalizationForm
- NormalizationForm
一個 Unicode 正規化形式。
傳回
true 若此字串為參數 normalizationForm 指定的正規化形式;否則, false。
例外狀況
目前的實例包含無效的 Unicode 字元。
備註
某些 Unicode 字元具有多個對等的二進位表示法,由組合和/或複合 Unicode 字元集組成。 單一字元存在多種表示法,會使搜尋、排序、匹配及其他操作變得複雜。
Unicode 標準定義了一個稱為正規化的過程,當給定字元的任何對等二進位表示法時,該表示法會傳回一個二進位表示法。 正規化可以用多種稱為正規化形式(normalization forms)的演算法來完成,這些演算法遵循不同的規則。 .NET 目前支援正規化形式 C、D、KC 和 KD。
關於支援的 Unicode 正規化形式的描述,請參見 System.Text.NormalizationForm。
給呼叫者的注意事項
IsNormalized當方法遇到字串中第一個未正規化字元時,會立即返回false。 因此,若字串包含非正規化字元後接無效 Unicode 字元, Normalize 該方法會拋出 ArgumentException 雖然 IsNormalized 回傳 false。