【问题标题】:How to "normalize" python 3 unicode string如何“规范化”python 3 unicode 字符串
【发布时间】:2018-04-16 02:09:58
【问题描述】:
我需要比较两个字符串。 aa 是从 PDF 文件中提取的(使用 pdfminer/chardet),bb 是键盘输入。如何规范化第一个字符串以进行比较?
>>> aa = "ā"
>>> bb = "ā"
>>> aa == bb
False
>>>
>>> aa.encode('utf-8')
b'\xc4\x81'
>>> bb.encode('utf-8')
b'a\xcc\x84'
【问题讨论】:
标签:
python-3.x
utf-8
python-unicode
【解决方案1】:
你用unicodedata.normalize标准化:
>>> aa = b'\xc4\x81'.decode('utf8') # composed form
>>> bb = b'a\xcc\x84'.decode('utf8') # decomposed form
>>> aa
'ā'
>>> bb
'ā'
>>> aa == bb
False
>>> import unicodedata as ud
>>> aa == ud.normalize('NFC',bb) # compare composed
True
>>> ud.normalize('NFD',aa) == bb # compare decomposed
True