首页 > 解决方案 > unicodedata.normalize 缺少一个字符进行转换

问题描述

我正在尝试使用以下脚本重命名文件,但在捕获以下“不要”时遇到问题,该“不要”最终应为“不要”。关于如何做到这一点的任何想法?

def remove_accents(s): 
    nkfd_form = unicodedata.normalize('NFKD', s) 
    return u''.join([c for c in nkfd_form if not unicodedata.combining(c)])

for fname in glob.glob("**/*.mp3", recursive=True):
    new_fname = remove_accents(fname)
    if new_fname != fname:
        try:
            print ('renaming non-ascii filename to', new_fname)
            os.rename(fname, new_fname)
        except Exception as e:
            print (e)

标签: pythonunicodeunicode-normalization

解决方案


错误的工作工具 -unicodedata.normalize根本不是为了消除口音。

要向下转换为 ascii,请查看unidecode

>>> from unidecode import unidecode
>>> unidecode("Don’t")
"Don't"

推荐阅读