유니코드 NFD to NFC 변환
작성일: / 수정일:
유니코드 NFD 문자열을 NFC 문자열로 변환하는 방법을 Python 스크립트와 nfd2c
툴을 활용하여 설명합니다.
이 글은 macOS 및 다양한 운영 체제에서 유니코드 호환성을 유지하기 위해 NFD와 NFC 간 변환이 필요한 상황에 유용합니다.
NFD와 NFC
유니코드는 다양한 언어와 문자를 일관되게 표현하기 위한 국제 표준입니다. 하지만 동일한 문자라도 운영 체제나 시스템에 따라 다른 유니코드 정규화 방식(NFD, NFC)으로 저장되거나 처리될 수 있습니다.
이는 파일 시스템, 데이터베이스, 문자열 비교 등에서 예상치 못한 문제를 일으킬 수 있습니다.
유니코드 정규화 방식
- NFD (Normalization Form Decomposition)
- 문자 분해 방식: 기본 문자와 결합 문자(음절)를 별도로 분리해 표현합니다.
- 특징:
- 일부 시스템에서 호환성 문제가 발생할 수 있습니다.
(예: macOS의 파일 시스템은 NFD 형식을 기본으로 사용) - 같은 문자열이지만, 서로 다른 형식으로 인식되어 비교나 검색이 실패할 가능성이 있습니다.
- 저장 공간을 더 많이 사용합니다.
- 시각적으로는 동일해 보이지만 내부적으로 다른 표현을 가집니다.
- 일부 시스템에서 호환성 문제가 발생할 수 있습니다.
- 예시:
- NFD:
ā
(문자a
+ 결합 문자¯
)
- NFD:
- NFC (Normalization Form Canonical Composition)
- 문자 합성 방식: 가능한 경우 기본 문자와 결합 문자를 단일 문자로 합성합니다.
- 특징:
- 대부분의 시스템에서 더 높은 호환성을 제공합니다.
(Windows, Android 등은 NFC 형식을 기본으로 사용) - 문자열 비교 및 검색이 용이합니다.
- 저장 공간을 절약할 수 있습니다.
- 대부분의 시스템에서 더 높은 호환성을 제공합니다.
- 예시:
- NFC:
ā
(단일 문자ā
)
- NFC:
NFD와 NFC의 필요성
- 운영 체제 간 호환성: macOS와 Windows/Android 간 파일 이름 불일치 문제를 해결합니다.
- 데이터 정합성 유지: 데이터베이스나 텍스트 파일의 문자열 비교 결과를 일관되게 만듭니다.
Python 스크립트로 변환하기
Python의 unicodedata.normalize
함수를 사용하면 NFD 문자열을 쉽게 NFC 문자열로 변환할 수 있습니다.
아래는 간단한 변환 예제입니다.
import unicodedata
def nfd_to_nfc(text):
"""NFD 문자열을 NFC 문자열로 변환합니다."""
return unicodedata.normalize('NFC', text)
# 테스트 문자열 (예: macOS에서 NFD로 저장된 문자열)
text = "Amēricā"
nfc_text = nfd_to_nfc(text)
print(f"원본 텍스트: {text}") # 출력: 원본 텍스트 (NFD)
print(f"변환된 텍스트: {nfc_text}") # 출력: America
주요 함수 설명
unicodedata.normalize(form, text)
form
: 변환할 정규화 방식 (예:'NFC'
,'NFD'
,'NFKC'
,'NFKD'
)text
: 변환할 문자열
- 유용한 활용 예시:
- 텍스트 데이터 전처리
- 운영 체제 간 파일 이름 호환성 유지
- 검색 기능 강화 (정규화된 형태로 통합)
nfd2c
툴 사용하기
파일 및 디렉토리 이름의 NFD 문자열을 NFC 문자열로 변환하려면 nfd2c
툴이 유용합니다.
특히 macOS와 Windows 간 파일 시스템 호환성 문제를 해결하는 데 효과적입니다.
설치 및 기본 사용법
$ pip install unicode-nfd2c
사용법 예시
# 현재 디렉토리의 파일 이름을 NFC 형식으로 변환
$ nfd2c
# 모든 서브 디렉토리를 포함해 변환 실행
$ nfd2c -r
# 변환 실행 (파일 이름 변경)
$ nfd2c -x
# 특정 파일만 변환
$ nfd2c -f myfile.txt
옵션 설명
-x, --execute
: 실제 이름 변경 실행-r, --recursive
: 서브 디렉토리 포함-d, --dir-only
: 디렉토리 이름만 변환-f, --file-only
: 파일 이름만 변환-h, --help
: 도움말 표시
변환 전후 확인
$ nfd2c
Found NFD filename: "Amēricā.txt"
Would convert to: "America.txt"
실제 변환을 실행하려면 -x
옵션을 추가합니다.
마무리
NFD와 NFC 변환은 운영 체제 간 호환성과 데이터 정합성을 유지하는 데 필수적입니다.
- Python의
unicodedata
모듈은 텍스트 기반 데이터에 유용합니다. - nfd2c 툴은 파일 및 디렉토리 이름을 변환하는 데 효율적입니다.
이 글에서 제공한 방법을 통해 유니코드 문자열 처리 문제를 해결하고 시스템 간 호환성을 확보하세요. 😊
댓글남기기