python中unicode格式的分解与组合转换

2024-10-02 16:25:21 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在python 2.7.10中的Clés的Cl\u00e9s和Cle\u0301s之间转换


Tags: clcleu00e9su0301s
2条回答

unicodedata.normalize函数将Unicode字符串转换为完全组合或完全分解的形式。你知道吗

>>> import unicodedata as ud
>>> d = u'Cle\u0301s'
>>> c = u'Cl\u00e9s'
>>> ud.normalize('NFC',c) # no change, already composed form
u'Cl\xe9s'                # Note: escape codes display with a smaller form if possible.
>>> ud.normalize('NFC',d) # changes to composed form
u'Cl\xe9s'
>>> ud.normalize('NFD',c) # changes to decomposed form
u'Cle\u0301s'
>>> ud.normalize('NFD',d) # no change, already decomposed form
u'Cle\u0301s'

如果以该格式的字节字符串开始,则以下内容将首先转换为Unicode字符串:

>>> db = 'Cle\u0301s'
>>> cb = 'Cl\u00e9s'
>>> d = db.decode('unicode_escape')
>>> c = cb.decode('unicode_escape')
>>> d
u'Cle\u0301s'
>>> c
u'Cl\xe9s'

万分感谢@markransem和我一起调试,得到了我想要的东西!你知道吗

    print uni
    >> Clés
    print v1.lower()
    >> cl\u00e9s
    print v2.lower()
    >> cle\u0301s

    print len(unicodedata.normalize('NFD', v1.lower().decode('UTF-8')))
    >> 9
    print len(unicodedata.normalize('NFC', v2.lower().decode('UTF-8')))
    >> 10

    print len(v1.lower().decode("unicode_escape"))
    >> 4

    print len(v2.lower().decode("unicode_escape"))
    >> 5

    print len(unicodedata.normalize('NFD', v1.lower().decode("unicode_escape")))
    >> 5
    print len(unicodedata.normalize('NFC', v2.lower().decode("unicode_escape")))
    >> 4

    print len(v1.lower().decode("unicode_escape"))
    >> 4

    print (v1.lower().decode("unicode_escape") == unicodedata.normalize('NFC', v2.lower().decode("unicode_escape")))
    >> True

显然,这里的lower()和upper()对大多数人来说都不是一个好主意,但对我来说,这是可行的,因为我希望从两个不同的进程中得到或多或少相同的单词。你知道吗

相关问题 更多 >