유니코드 NFD to NFC 변환

유니코드 NFD 문자열을 NFC 문자열로 변환하는 방법을 Python 스크립트와 nfd2c 툴을 활용하여 설명

NFD와 NFC

유니코드는 다양한 언어와 문자를 표현하기 위한 표준입니다.
동일한 문자라도 NFD와 NFC 라는 두 가지 방식으로 표현될 수 있으며, 서로 호환되지 않아 문제를 일으킬 수 있습니다.

macOS가 아닌 다른 OS의 경우 자모음을 분리해서 표현됨

  • NFD (Normalization Form Decomposition)

    • 유니코드 문자열을 분해하여 기본 문자와 결합 문자로 표현하는 방식

    • 일부 시스템에서 호환성 문제 발생 가능성이 있음 (macOS 등)

    • 시각적으로 인지하기 어려움

    • 저장 공간을 더 많이 사용함

  • NFC (Normalization Form Canonical Composition)

    • 유니코드 문자열을 합성하여 단일 문자로 표현하는 방식

    • 대부분의 시스템에서 호환성이 높음 (Windows, Android 등)

    • 시각적으로 인지하기 편함

Python Script

  • unicodedata.normalize 함수를 사용하여 NFD 문자열을 NFC 문자열로 변환
import unicodedata

def nfd_to_nfc(text):
  return unicodedata.normalize('NFC', text)

text = "Hello, world!"
nfc_text = nfd_to_nfc(text)

print(nfc_text)  # 출력: "Hello, world!"

Python Tool : nfd2c

  • 파일이나 디렉토리 이름의 NFD 문자열을 NFC 문자열로 변환하는 데 유용

  • nfd2c 툴을 통해 파일이나 디렉토리 이름 확인 후, -x 옵션을 통해 rename 실행

$ pip install unicode-nfd2c
$ nfd2c
Converts NFD Unicode filenames to NFC.

USAGE: nfd2c [options] [dir(s)|file(s)]
    -x, --execute      rename on
    -r, --recursive    sub-directories on
    -d, --dir-only     directory only
    -f, --file-only    file only
    -h, --help         help