정규화 및 정렬
업데이트: 2007년 11월
일부 유니코드 문자에는 조합 또는 합성 유니코드 문자의 집합으로 구성된 여러 개의 동일한 이진 표현이 있습니다. 결과적으로 두 문자열이 동일하게 보일 수 있지만 실제로는 서로 다른 문자로 구성됩니다. 단일 문자에 대해 여러 표현이 있을 수 있기 때문에 정렬 작업이 복잡해집니다. 이 문제를 해결하려면 각 문자열을 정규화한 다음 서수 비교를 사용하여 문자열을 정렬합니다.
유니코드 표준에서는 문자의 동일한 이진 표현 중 어느 것을 전달해도 단일의 이진 표현을 반환하는 정규화라는 프로세스를 정의합니다. 유니코드 표준에서는 문자열을 정규화하는 데 사용할 수 있는 정규화 형식이라는 네 가지 알고리즘을 정의합니다. 각 정규화 형식은 서로 다른 규칙을 따르므로 입력 문자열의 서로 다른 이진 표현을 생성합니다. 그러나 동일한 정규화 형식으로 정규화된 두 문자열은 대/소문자를 구분하지 않는 서수 비교를 사용하여 비교할 수 있습니다.
두 문자열의 서수 비교는 정규화된 문자열을 나타내는 두 String 개체에서 해당하는 각 Char 구조체 쌍의 숫자 값 또는 코드 포인트에 대한 이진 비교입니다. .NET Framework에서는 서수 비교를 수행할 수 있는 여러 메서드를 제공합니다.
응용 프로그램에서는 다음 프로세스를 사용하여 문자열을 정규화 및 정렬할 수 있습니다.
파일이나 사용자 입력과 같은 입력 소스에서 정렬할 두 문자열을 가져옵니다.
두 문자열을 정규화 형식 C로 정규화하려면 String.Normalize() 메서드를 사용하고 두 문자열을 선택한 정규화 형식으로 정규화하려면 String.Normalize(NormalizationForm) 메서드를 사용합니다.
두 문자열을 비교하려면 Ordinal 또는 OrdinalIgnoreCase 값을 사용하는 Compare(String, Int32, String, Int32, Int32, StringComparison) 메서드와 같은 서수 문자열 비교를 사용합니다. 비교 작업에서는 첫 번째 문자열이 어휘적으로 두 번째 문자열 앞에 나오는지 또는 두 문자열이 어휘적으로 동일한지 확인합니다.
3단계의 결과에 따라 정렬된 출력의 문자열을 내보냅니다. 문자열이 동일하지 않으면 오름차순이나 내림차순이 적용된 순서대로 문자열을 내보냅니다.
문자열이 동일한 경우 어휘적 순서 이외의 다른 특징을 기준으로 문자열을 배열할 수 없으면 두 문자열 중 어떠한 문자열도 먼저 내보낼 수 있습니다. 예를 들어, 응용 프로그램에서 파일 이름을 정렬하면서 각 파일의 속성을 출력에 함께 쓰는 경우 동일한 파일 이름을 파일 작성 날짜 순서대로 쓸 수 있습니다.
모든 입력이 정렬될 때까지 이 프로세스를 반복합니다.
.NET Framework에서 지원하는 정규화 형식에 대한 자세한 내용은 NormalizationForm 열거형에 대한 설명을 참조하십시오. 문자열을 정규화하는 방법에 대한 자세한 내용은 Normalize 메서드를 참조하십시오.
정규화, 문자 분해 및 동일성에 대한 자세한 정보는 Unicode 홈 사이트에서 Unicode Standard Annex #15, "Unicode Normalization Forms"를 참조하십시오.