한글 풀어쓰기
import unicodedata
NFD(풀어쓰기)
NFD로 정규화하여 풀어쓰기된 상태로 저장한다.
x = unicodedata.normalize('NFD', '한글')
저장된 글자 수가 6글자인 것을 확인할 수 있다.
len(x)
6
저장된 0번째 글자를 확인하면 ㅎ이다.
x[0]
'ᄒ'
NFC (모아쓰기)
NFC로 정규화하면 모아쓰기가 된 상태로 저장된다. 앞서 풀어쓰기한 글자도 다시 NFC로 정규화하면 모아쓰기가 된다.
y = unicodedata.normalize('NFC', x)
0번째 글자가 '한'으로 모아쓰기되어 있다.
y[0]
'한'
한글 자모와 한글 호환 자모
NFD로 저장할 때는 저장되는 한글 자모와 키보드로 입력하는 한글 자모는 겉보기에는 같지만 다른 코드를 가지고 있다. x[0]
은 'ㅎ'이지만 키보드로 입력한 'ㅎ'과 비교하면 다르고 나온다.
x[0] == 'ㅎ'
False
x[0]
의 글자 코드를 확인하면 16진수로 0x1112
이다.
hex(ord(x[0]))
'0x1112'
반면 키보드로 입력한 'ㅎ'은 0x314e
이다.
hex(ord('ㅎ'))
'0x314e'