업데이트:

유니코드 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

댓글남기기