Python 重命名文件:UnicodeEncodeError:';utf-8';编解码器可以';t编码字符'\udca9';

Python 重命名文件:UnicodeEncodeError:';utf-8';编解码器可以';t编码字符'\udca9';,python,unicode,Python,Unicode,我正在尝试使用Python 3脚本重命名文件: #!/usr/bin/env python3 import os import unicodedata def convertString(s): return unicodedata.normalize('NFKD', s).encode('ASCII', 'ignore').decode('utf-8') def renameFile(old,new): os.rename(old, new) dir = '/media/

我正在尝试使用Python 3脚本重命名文件:

#!/usr/bin/env python3
import os
import unicodedata

def convertString(s):
    return unicodedata.normalize('NFKD', s).encode('ASCII', 'ignore').decode('utf-8')

def renameFile(old,new):
    os.rename(old, new)

dir = '/media/alpha/directory/docs/'

for root, dirs, files in os.walk(dir):
    for d in dirs:
        normal = convertString(d)
        if normal != d:
            renameFile(os.path.join(root, d), os.path.join(root, normal))

    for file in files:
        normal = convertString(file)

        if normal != file:
            renameFile(os.path.join(root, file), os.path.join(root, normal))
在某些情况下,遇到引发此错误的字符串:

Traceback (most recent call last):
  File "/home/alpha/PycharmProjects/rename/findInvalidEncoding.py", line 22, in <module>
    renameFile(os.path.join(root, d), os.path.join(root, normal))
  File "/home/alpha/PycharmProjects/rename/findInvalidEncoding.py", line 10, in renameFile
    print(old)
UnicodeEncodeError: 'utf-8' codec can't encode character '\udca9' in position 60: surrogates not allowed
回溯(最近一次呼叫最后一次):
文件“/home/alpha/PycharmProjects/rename/findInvalidEncoding.py”,第22行,在
重命名文件(os.path.join(root,d),os.path.join(root,normal))
文件“/home/alpha/PycharmProjects/rename/findInvalidEncoding.py”,第10行,在重命名文件中
打印(旧)
UnicodeEncodeError:“utf-8”编解码器无法对位置60中的字符“\udca9”进行编码:不允许使用代理
大多数情况下,带有umlauts、插入符号等的字符会按预期被替换,但显然存在一些问题,特别是变量
file
行中重命名文件(os.path.join(根,文件),os.path.join(根,正常))


如何解决此问题?

否,错误明确表示这是针对
print(old)
行的。您发布的代码中没有。与错误消息匹配的代码以及导致错误的文件名或目录名将非常有用。我怀疑问题在于操作系统是Linux,并且涉及到
代理_escape
编解码器。@melpomene-谢谢你指出这一点。我完全找错人了。一旦我删除了print语句并加入了rename,它就工作了。