IOError返回带有损坏编码的消息

时间:2018-03-07 11:36:45

标签: python encoding exception-handling python-2.6 shutil

Python 2.6 Linux(CentOS)

我使用shutil.copyfile()函数来复制文件。如果文件不存在,我会在日志文件中写一条异常消息。所以,我得到错误符号的消息,因为我的文件路径包含俄语字符。例如: 原始文件路径 - “/ PNG / 401/405 /018_01200Г/ osv_1.JPG”('Г'是俄文符号) 消息中的文件路径 - “/PNG/401/405/018_/01200\xd0\x93/osv_1.JPG” 我试图使用此代码print(str(error).decode('utf-8')),但它不起作用。但是这段代码 print(os.listdir(r'/PNG/401/405/018_/')[0].decode('utf-8'))工作得很好。有任何想法吗?

3 个答案:

答案 0 :(得分:0)

让我们打破你的命令:

print(str(error).decode('utf-8'))

首先它会:

str(error)

将其转换为字符串,可以调用此temp_string

然后它会尝试:

temp_string.decode('utf-8)

这将作为字符串对象失败,没有.decode(),因此您将收到如下错误消息:

builtins.AttributeError: 'str' object has no attribute 'decode'

永远不会进入print()

你应该做的是:

print(error.decode('utf-8'))

或者,您可以使用:

print(str(error))

答案 1 :(得分:0)

输出完全正确。 'Г'是unicode字符U + 0413(CYRILLIC CAPITAL LETTER GHE),其UTF-8编码是2个字符'\xd0''\x93'。您只需使用支持utf8的文本编辑器(gvim或notepad ++)读取日志文件,或者如果必须在Python中处理它,请确保将其作为utf8编码文件读取。

答案 2 :(得分:0)

print(str(error).decode('string-escape')) - 适合我