이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

String.Normalize 메서드 ()

 

게시 날짜: 2016년 11월

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

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

public string Normalize()

반환 값

Type: System.String

텍스트 값이 이 문자열과 같지만 이진 표현의 형식이 정규화 형식 C인 정규화된 새 문자열입니다.

Exception Condition
ArgumentException

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

일부 유니코드 문자는 동일한 집합 조합으로 구성 된 여러 이진 표현 및/또는 복합 유니코드 문자입니다. 예를 들어 다음 코드 포인트의 문자 "ắ"을 나타낼 수 있습니다.

  • U + 1EAF

  • U + 0103 U + 0301

  • U + 0061 U + 0306 U + 0301

단일 문자에 대 한 여러 표현이 검색, 정렬, 일치 및 기타 작업 복잡해 집니다.

표준 유니코드 문자는 해당 하는 이진 표현 중 어느 것을 전달 하는 경우 이진 표현 하나를 반환 하는 정규화 라는 프로세스를 정의 합니다. 정규화는 서로 다른 규칙을 따르는 정규화 형식 이라는 여러 알고리즘을 수행할 수 있습니다. .NET Framework에는 네 가지 정규화 형식 (C, D, KC 및 KD)는 유니코드 표준에서 정의 된 지원 합니다. 두 문자열이 동일한 정규화 형식에 표시 되 면 theycan 서 수 비교를 사용 하 여 비교할 수 있습니다.

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

  1. 파일 또는 사용자 입력된 장치 등의 입력된 소스에서 비교할 문자열을 가져옵니다.

  2. 호출 된 Normalize() 문자열 정규화 C. 정규화 하는 메서드

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

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

지원 되는 유니코드 정규화 형식에 대 한 참조 System.Text.NormalizationForm합니다.

호출자 참고 사항:

IsNormalized 메서드가 반환한 false 문자열의 첫 번째 정규화 되지 않은 문자에 도달 합니다. 따라서 문자열에 정규화 되지 않은 문자와 잘못 된 유니코드 문자가 포함 된 경우는 Normalize 메서드는 ArgumentException 있지만 IsNormalized 반환 false합니다.

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

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

*/

.NET Framework
2.0 이후 사용 가능
맨 위로 이동
표시: