我有这个myfile(我已经粘贴了,我希望有关问题的相关数据能够在复制/粘贴中幸存下来)。我尝试用以下内容读取该文件:
import codecs
codecs.open('myfile', 'r', 'utf-8').read()
但是这给了:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe5 in position 7128: invalid continuation byte
如果我检查文件:
» file myfile
myfile: C source, ISO-8859 text
我很多次处理我没有生成的文件(系统文件,从互联网上下载的随机文件,供应商,客户提供的随机文件......):这些文件没有提供线索他们正在使用的编码。在多文化环境(欧洲)中,很难知道这些文件是如何编码的。大多数时候,即使是提供文件的人也没有关于编码的线索,这可以通过选择的编辑器/工具在幕后发生。如何确定所使用的编码,逐个文件?
答案 0 :(得分:12)
使用python 3.3,您可以使用内置的开放功能
open("myfile",encoding="ISO-8859-1")
答案 1 :(得分:11)
您更改open()
命令中的编解码器; ISO-8859标准有多个编解码器,我在这里为你选择了Latin-1,但你可能需要选择另一个:
codecs.open('myfile', 'r', 'iso-8859-1').read()
有关有效编解码器的列表,请参阅codecs
module。根据pastie数据判断,iso-8859-1是正确使用的编解码器,因为它适用于斯堪的纳维亚文本。
通常,如果没有其他来源,您无法知道文件使用的编解码器。充其量,你可以猜测(这是file
的作用)。