Unicode 정규화
NFC, NFD, NFKC, NFKD 형태로 텍스트를 정규화하고 변경 여부를 표시합니다.
같은 글자를 나타내는 여러 Unicode 표현을 NFC, NFD, NFKC, NFKD 중 선택한 형태로 맞춰 비교하거나 저장할 수 있게 합니다.
사용 순서
- 정규화할 텍스트를 입력하거나 샘플을 불러옵니다.
- 정규화 형태를 NFC, NFD, NFKC, NFKD 중에서 고릅니다.
- 변경 여부 문구를 확인한 뒤 결과 텍스트를 복사합니다.
예시
e 뒤에 결합 악센트 U+0301을 붙인 입력을 NFC로 바꾸면 é 한 글자로 합쳐져 Café가 됩니다. ①은 NFKC에서 1이 됩니다.
한계
대소문자 변환, 공백 정리, 보이지 않는 문자 제거는 하지 않습니다. NFKC와 NFKD는 원문자, 전각 문자, 합자 같은 호환 문자를 기본 형태로 바꾸므로 의미가 달라지는 결과는 직접 확인해야 합니다.
보안 주의
NFKC나 NFKD를 계정 ID, 파일명, 검색 키에 적용하기 전에 원본과 결과를 모두 보관해 두세요. 호환 문자가 다른 글자로 바뀌면 원래 값을 되돌리기 어렵습니다.
배경 지식
같은 글자라도 Unicode에서는 여러 방식으로 쓸 수 있습니다. 예를 들어 é는 한 글자(U+00E9)로 쓸 수도 있고, e(U+0065)와 결합 악센트(U+0301)를 두 글자로 나눠 쓸 수도 있습니다. 화면에서는 똑같이 보여도 길이와 비교 결과가 달라지므로, 정규화는 이런 차이를 정해진 규칙으로 하나의 형태에 맞추는 작업입니다.
NFC는 분리된 글자를 합쳐 가능한 한 짧은 형태로 만들고, NFD는 반대로 모두 분해합니다. NFKC와 NFKD는 여기에 호환 분해를 더합니다. 호환 분해는 ① 같은 원문자를 1로, 전각 영문자를 일반 영문자로 바꾸는 규칙입니다. 검색어를 넓게 맞출 때 쓸모가 있지만, 원래 의미가 달라지는 경우도 있습니다.
실무에서는 파일 이름과 사용자 입력을 비교할 때 문제가 자주 생깁니다. 운영체제나 파일 시스템마다 기본 형태가 달라 같은 이름의 파일을 동기화 후에 찾지 못하는 일이 있습니다. 데이터를 비교하거나 인덱싱하기 전에 한 형태(보통 NFC)로 통일해 두면 이런 오류를 줄일 수 있습니다.
자주 묻는 질문
NFC와 NFKC 중 무엇을 골라야 하나요?
NFC는 글자 모양을 유지하면서 표현만 통일하므로 대부분의 저장 데이터에 맞습니다. NFKC는 ① 같은 호환 문자를 기본 글자로 바꾸기 때문에 검색 키처럼 의미를 넓게 맞춰야 할 때만 쓰는 편이 안전합니다.
정규화하면 글자 수가 바뀌나요?
바뀔 수 있습니다. é는 NFD에서 두 코드 포인트로 나뉘므로 길이가 늘고, NFC에서는 다시 한 글자로 합쳐집니다. 길이 제한이 있는 필드에는 정규화 후의 길이를 다시 확인하세요.
정규화만으로 대소문자 차이도 없어지나요?
아니요. 정규화는 대소문자를 바꾸지 않습니다. A와 a를 같은 값으로 보려면 정규화와 별도로 소문자 변환이나 대소문자 무시 비교를 적용해야 합니다.