Python 重命名文件:UnicodeEncodeError:';utf-8';编解码器可以';t编码字符'\udca9';
我正在尝试使用Python 3脚本重命名文件: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/
#!/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,它就工作了。