尝试打开文本文件时,python 3.5中的UnicodeDecodeError

时间:2016-11-15 06:28:16

标签: python

我尝试使用以下命令打开一些配置文件:

f=open(os.path.join(root, name),mode='rt',errors='ignore')

但是,升级到python 3.5后,我收到以下错误。

for line in f:
  File "C:\python35-32\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 57: chara
cter maps to <undefined>

当我使用python 2.7运行时,此代码工作正常。我试图将编码指定为utf8或latin1,但它们现在都没有。如果有人能建议我前进的方向,那会非常有用吗?

如果我可以忽略错误并转到下一行就可以了。我怎样才能跳过错误的部分?

2 个答案:

答案 0 :(得分:1)

尝试指定文件open(os.path.join(root, name), encoding='utf-8')

的编码

答案 1 :(得分:0)

您可以使用codecs.open

import codecs
f = codecs.open(os.path.join(root, name), mode='rt', encoding='utf-8')
for line in f:
    #do something

此外,我不认为问题出在您的代码上,而是使用Windows命令提示符,因为其编码是&#39; cp1252&#39;。我很久以前就遇到过这个问题。基本上,如果您在Windows命令提示符下运行脚本,并且只要代码执行打印功能(打印unicode数据),程序就会崩溃,因为Windows命令提示符无法解码并打印它。

您还可以通过打印原始数据来解决此问题。也就是说,将所有打印功能更改为print("%r" % line)