정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

String.Normalize 메서드 (NormalizationForm)

텍스트 값이 이 문자열과 같지만 이진 표현의 형식이 지정한 유니코드 정규화 형식인 새 문자열을 반환합니다.

네임스페이스:  System
어셈블리:  mscorlib(mscorlib.dll)

public string Normalize(
	NormalizationForm normalizationForm
)

매개 변수

normalizationForm
형식: System.Text.NormalizationForm
유니코드 정규화 형식입니다.

반환 값

형식: System.String
텍스트 값이 이 문자열과 같지만 이진 표현의 형식이 normalizationForm 매개 변수로 지정된 정규화 형식인 새 문자열입니다.

예외조건
ArgumentException

현재 인스턴스에 잘못된 유니코드 문자가 포함되어 있습니다.

일부 유니코드 문자에는 조합 또는 합성 유니코드 문자의 집합으로 구성된 여러 개의 동일한 이진 표현이 있습니다. 단일 문자에 대한 표현이 여러 개 있으면 검색, 정렬, 대조 및 기타 작업이 복잡해집니다.

유니코드 표준은 정규화라는 프로세스를 정의하며 이 프로세스는 문자에 대한 동등한 이진 표현이 주어질 경우 이진 표현 하나를 반환합니다. 정규화는 정규화 폼이라는 서로 다른 규칙을 따르는 여러 알고리즘을 사용하여 수행할 수 있습니다. .NET Framework에서는 유니코드 표준으로 네 가지 정규화 형식(C, D, KC 와 KD)를 지원합니다. 두 문자열이 동일한 정규화 폼으로 나타날 때, 서수 비교를 사용하여 비교할 수 있습니다.

두 문자열을 표준화하고 비교하려면 다음을 수행 합니다.

  1. 파일이나 사용자 입력장치 같은 입력 소스에서 비교할 두 문자열을 가져옵니다.

  2. 지정된 정규화 형식으로 문자열을 정규화하는 Normalize(NormalizationForm) 문자열을 호출합니다.

  3. 두 문자열을 비교 하려면, Compare(String, String, StringComparison) 메서드와 같은, 서 수 문자열 비교를 지원하는 메서드를 호출하고, StringComparison.Ordinal 또는 StringComparison 인수로써 StringComparison.OrdinalIgnoreCase 의 값을 제공합니다. 정규화된 문자열의 배열을 정렬하기위해, Array.Sort 의 적합한 오버로드를 위해 StringComparer.OrdinalIgnoreCase 또는 StringComparer.Ordinal 의 값을 comparer 에 전달합니다.

  4. 이전 단계에 나타난 순서에 따라 정렬된 출력으로 문자열을 내보냅니다.

지원되는 유니코드 정규화 형식에 대한 자세한 내용은 System.Text.NormalizationForm을 참조하십시오.

호출자 참고 사항

IsNormalized 메서드는 문자열에서 첫 번째 정규화되지 않은 문자를 발견하는 즉시 false를 반환합니다. 따라서 문자열에 정규화되지 않은 문자와 잘못된 유니코드 문자가 포함된 경우 IsNormalizedfalse를 반환하더라도 Normalize 메서드는 ArgumentException을 throw할 수 있습니다.

다음 예제에서는 문자열을 각각 네 개의 정규화 형식으로 정규화하고 문자열이 지정한 정규화 형식으로 정규화되었는지 확인한 다음 정규화된 문자열에 코드 포인트를 나열합니다.


// This example demonstrates the String.Normalize method
//                       and the String.IsNormalized method

using System;
using System.Text;

class Sample 
{
    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);

    try 
    {
    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();
    }

    catch (Exception e) 
        {
        Console.WriteLine(e.Message);
        }
    }

    private static void Show(string title, string s)
    {
    Console.Write("Characters in string {0} = ", title);
    foreach(short x in s.ToCharArray())
        {
        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

*/


.NET Framework

4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0에서 지원

.NET Framework Client Profile

4, 3.5 SP1에서 지원

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(서버 코어 역할은 지원되지 않음), Windows Server 2008 R2(서버 코어 역할은 SP1 이상에서 지원, Itanium은 지원되지 않음)

.NET Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

커뮤니티 추가 항목

표시:
© 2014 Microsoft