"대소 문자를 구별하지 않는"정규화 된 형식의 유니 코드 텍스트를 생성해야하는 C 프로젝트에서 작업 중입니다. 정규화 형식을 NFD로 정규 변환 한 다음 유니 코드 대괄호 알고리즘을 적용하고 마지막으로 결과를 유니 코드 정규화 형식 NFC로 변환하여 정규화 된 형식을 정의하도록 선택했습니다.이 유니 코드 NFC 변환이 맞습니까?
유니 코드 표현 및 유틸리티 기능을 위해 ICU의 C API를 사용하고 있으며 ICU의 unorm_normalize()
및 u_strFoldCase()
기능을 사용하여 내 체계를 구현하는 것이 매우 간단했습니다. 하지만 내 테스트 중 하나가 실패하고, 왜 그런지 이해하지 못합니다. ICU는 내가 예상했던 것과 다른 NFC 형태를 생성하는 것 같습니다. 디버거를 통해
U+0020, U+1EA5, U+0328, U+1EC4, U+031C
, 나는 그 ICU를 결정 나는 경우 폴딩 후 중간 결과에 대해 동의합니다 :
입력 순서는 이러한 BMP 코드 포인트로 구성되어 특히
U+0020 U+0061 U+0328 U+0302 U+0301 U+0065 U+031C U+0302 U+0303
주 NFD를 형성하기위한 이전의 변환은 U + 1EC4의 분해의 중간으로 문자 U + 031C를 옮겼다. 관련 문자의 상대적인 CCC 번호를 기반으로 적절하다. 그게 제가 시험하려고하는 부분입니다.
이제 좋은 부분 : ICU에 따르면, 접힌 문자 시퀀스의 NFC 정상화 내가 세 후행 결합 문자가 이미 있기 때문에
U+0020 U+0105 U+0302 U+0301 U+0065 U+031C U+0302 U+0303
해야한다고 생각하는 반면
U+0020 U+0105 U+0302 U+0301 U+1ec5 U+031C
입니다 정식 순서이며 U + 0065 및 U + 031C의 정식 구성은 없습니다.
그래서, 두 가지 질문 :
올바른 NFC 양식은- ?
- ICU가 올바른 경우 그 이유는 무엇입니까?
내가 할 수만 있다면 분명하고 신뢰할 수있는 대답을 여러 번 회상합니다. –
정의 된 용어 "차단됨"에 대해 깊은 오해가 있음이 드러났습니다. 그 사이의 비 스타터가 처음으로 결합되지 않은 경우 문자 결합이 선행 스타터와 결합 될 수 있다는 것을 이해하지 못했습니다. 우수 답변. –