.NET의 String.Normalize는 무엇을합니까?
String.Normalize에 대한 MSDN 기사는 다음과 같이 간단히 설명합니다.
바이너리 표현이 특정 유니 코드 정규화 형식 인 새 문자열을 반환합니다.
때때로 "유니 코드 정규화 형식 C"를 참조합니다.
그게 무슨 뜻일까요? 이 기능은 실제 상황에서 어떻게 유용합니까?
유니 코드 문자열이 동일한 지 비교할 수 있는지 확인합니다 (다른 유니 코드 인코딩을 사용하는 경우에도).
Unicode Standard Annex # 15에서 :
기본적으로 유니 코드 정규화 알고리즘은 모든 결합 마크를 지정된 순서로 배치하고 분해 및 구성 규칙을 사용하여 각 문자열을 유니 코드 정규화 형식 중 하나로 변환합니다. 변환 된 문자열의 이진 비교는 동등성을 결정합니다.
C 형과 D 형의 한 가지 차이점은 악센트가있는 문자가 어떻게 표현되는지입니다. C 형은 악센트가있는 단일 문자 코드 포인트를 사용하는 반면, D 형은이를 문자와 악센트로 구분합니다.
예를 들어 "à"는 코드 포인트 224 ( "라틴 소문자 A와 억음") 또는 코드 포인트 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)
}
유니 코드에서 (구성된) 문자는 고유 한 코드 포인트 또는 기본 문자와 그 액센트로 구성된 일련의 코드 포인트를 가질 수 있습니다.
위키 백과 에는 베트남어 ế (U + 1EBF) 및 분해 된 시퀀스 U + 0065 (e) U + 0302 (곡절 악센트) U + 0301 (예음 악센트)가 나열되어 있습니다.
string.Normalize ()는 문자열을 유니 코드로 코딩 할 수있는 4 가지 일반 형식 사이에서 변환합니다.
이 링크에는 좋은 설명이 있습니다.
http://unicode.org/reports/tr15/#Norm_Forms
내가 추측 할 수있는 바에 따르면 두 개의 유니 코드 문자열을 비교할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/3288114/what-does-nets-string-normalize-do
'IT TIP' 카테고리의 다른 글
| python 스크립트에서 tar 파일 내용을 압축 해제하지 않고 읽기 (0) | 2020.11.04 |
|---|---|
| TortoiseSVN의 Windows 탐색기 아이콘이 상태를 수정하기 위해 새로 고치는 데 오랜 시간이 걸립니다. (0) | 2020.11.04 |
| Razor보기 파일 내에서 일반 구문을 사용하는 방법은 무엇입니까? (0) | 2020.11.04 |
| REST API 승인 및 인증 (웹 + 모바일) (0) | 2020.11.04 |
| os.path.exists와 os.path.isdir의 장단점 (0) | 2020.11.04 |