Python3'ascii'编解码器无法编码字符
Posted
技术标签:
【中文标题】Python3\'ascii\'编解码器无法编码字符【英文标题】:Python3 'ascii' codec can't encode characterPython3'ascii'编解码器无法编码字符 【发布时间】:2017-03-29 09:51:05 【问题描述】:我正在尝试重命名名称中包含非 unicode 字符的文件。
import os
dir = b'/tr2'
for file_name in os.listdir(dir):
file_name = file_name.decode('utf8','replace')
print(file_name)
os.rename(file_name,'11.txt')
只能打印这个名字,但是当我尝试重命名时,我得到了错误:
UnicodeEncodeError: 'ascii' codec can't encode character '\xf1' in position 11: ordinal not in range(128)
【问题讨论】:
这发生在哪一行?在print(file_name)
上(尝试将unicode 数据打印到无法处理unicode 的终端)或os.rename(file_name, '11.txt')
?请始终包含 full 堆栈跟踪。此外,您实际上不需要解码二进制文件名,如果您将其传递给os.rename
,它应该可以工作,正如os.listdir
返回的那样
在 os.rename()
相对于当前目录起作用,os.listdir()
返回的文件是相对于给定路径(dir = b'/tr2'
)的,这就是你得到 FileNotFoundError 的原因。尝试 os.rename(os.path.join(dir, file_name), os.path.join(dir, b'11.txt'))
而不解码 file_name。
【参考方案1】:
问题在于我需要显示 file_name 的值并稍后在程序中使用它。所以感谢 Martin Evans 在接下来的决定:
import os
dir = b'/tr2'
for file_name in os.listdir(dir):
print(file_name.decode('utf8','replace'))
os.rename(os.path.join(dir, file_name), os.path.join(dir, b'11.txt'))
【讨论】:
以上是关于Python3'ascii'编解码器无法编码字符的主要内容,如果未能解决你的问题,请参考以下文章
“UnicodeEncodeError:‘ascii’编解码器无法编码字符”
编码给出“'ascii'编解码器无法编码字符......序数不在范围内(128)”
UnicodeEncodeError:“ascii”编解码器无法编码字符
UnicodeEncodeError: 'ascii' 编解码器无法编码字符 u'\u2026'