MSDN article on String.Normalize 상태 :.NET의 String.Normalize는 무엇을합니까? 단순히
바이너리 표현 특정 유니 코드 정규화 형태 인 새로운 캐릭터 라인을 돌려줍니다.
때때로 "유니 코드 정규화 형식 C"를 참조하십시오.
내가 궁금한 점은 무엇을 의미합니까? 이 기능은 실제 상황에서 어떻게 유용합니까?
MSDN article on String.Normalize 상태 :.NET의 String.Normalize는 무엇을합니까? 단순히
바이너리 표현 특정 유니 코드 정규화 형태 인 새로운 캐릭터 라인을 돌려줍니다.
때때로 "유니 코드 정규화 형식 C"를 참조하십시오.
내가 궁금한 점은 무엇을 의미합니까? 이 기능은 실제 상황에서 어떻게 유용합니까?
이 링크는 좋은 설명이있다 : 나는 추측 할 수있는 일부터
http://unicode.org/reports/tr15/#Norm_Forms
는 그것 때문에 당신은 평등에 대한 두 개의 유니 코드 문자열을 비교할 수 있습니다.
양식 C와 양식 D의 차이점은 악센트가있는 문자가 어떻게 표시되는지입니다. 양식 C는 악센트 부호가있는 단일 코드 포인트를 사용하고 양식 D는 문자와 악센트로 문자를 구분합니다.
예를 들어 "à"는 코드 포인트 224 ("중표가있는 라틴 소문자") 또는 코드 포인트 97 ("라틴 소문자 A") 다음에 코드 포인트 786 ("중괄호 악센트 결합")이 될 수 있습니다.
부작용은 "악센트 제거"방법을 쉽게 만들 수 있다는 것입니다.
public static string RemoveAccents(string input)
{
return new string(
input
.Normalize(System.Text.NormalizationForm.FormD)
.ToCharArray()
.Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
.ToArray());
// the normalization to FormD splits accented letters in accents+letters
// the rest removes those accents (and other non-spacing characters)
}
+1. – GeReV
유니에서, (구성) 캐릭터 고유 코드 포인트 또는 기본 문자 및 악센트 이루어진 코드 포인트의 시퀀스를 가질 수 있습니다.
Wikipedia은 예를 들어 베트남어 ế (U + 1EBF) 및 그 분해 된 순서 U + 0065 (e) U + 0302 (곡절 악센트) U + 0301 (악센트)로 나열됩니다.
string.Normalize()는 4 개의 일반 양식 사이에서 유니 코드로 문자열을 코딩 할 수 있습니다.
+1 좋은 질문, 저 자신에 대해 궁금합니다. –