- 유니코드 정규화(Unicode normalization)는 동등한 문자를 서로 다른 코드 포인트 배열로 적었을 때, 비교와 처리에 사용할 형태를 맞추는 일이다. [[문자]]의 모양이 같다고 내부 배열까지 같은 것은 아니다. 눈은 통과시켰지만 컴퓨터는 서류를 한 장 더 요구한다. - 한글 ‘가’는 완성된 음절 `U+AC00`으로 나타낼 수도 있고, 조합용 자모 `U+1100`과 `U+1161`을 이어서 나타낼 수도 있다. 아래 [[자바스크립트]] 예제는 두 문자열의 엄격한 비교 결과가 정규화 전후에 달라지는 것을 보여준다. - NFC는 정준 분해 뒤 가능한 부분을 다시 합성하고, NFD는 정준 분해를 사용한다. NFKC와 NFKD는 호환성 차이까지 없애므로 서식상의 구별이 중요한 원고에 무조건 적용하지 않는다. 정규화는 [[교정]]이나 맞춤법 검사와 다른 작업이다. - [[텍스트 파일]]과 파일 이름에서 검색이나 비교가 어긋난다면 코드 포인트를 살펴볼 수 있다. 모든 운영 체제와 프로그램이 파일 이름을 같은 방식으로 처리한다고 가정하지 않는다. 복사본에서 원인을 확인하고 원본 이름을 일괄 변경하는 일은 별도로 판단한다. - 글자의 개수도 세는 단위에 따라 달라진다. 코드 포인트 수와 사람이 한 글자로 읽는 단위는 항상 일치하지 않는다. 이 구별은 [[글자 수의 여러 기준]]에서 이어 살펴볼 수 있다. ```javascript const composed = "\uAC00"; const decomposed = "\u1100\u1161"; console.log(composed === decomposed); // false console.log(composed.normalize("NFC") === decomposed.normalize("NFC")); // true console.log([...composed].length, [...decomposed].length); // 1 2 ``` 참고: [유니코드 정규화 FAQ](https://www.unicode.org/faq/normalization.html). ## 기타 등등 - 각각 정규화한 두 문자열을 이어 붙였다고 해서 결과도 정규화된 상태인 것은 아니다. 유니코드 FAQ는 접합부에서 다시 정규화가 필요할 수 있다고 설명한다. [출처](https://www.unicode.org/faq/normalization.html) - NFC로 정규화하면 항상 문자열이 짧아지는 것은 아니다. 유니코드 FAQ는 호환성과 안정성 때문에 일부 문자가 더 긴 배열로 바뀔 수 있다고 설명한다. [출처](https://www.unicode.org/faq/normalization.html) #문자 #개념 #프로그래밍