16

我有这个我的文件(我已经粘贴了,我希望有问题的相关数据在复制/粘贴中幸存下来)。我尝试使用以下命令读取该文件:

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
  • 如何在 python 中读取那种文件(ISO-8859)?
  • 在一般情况下,我怎么知道文件是如何编码的?

很多时候我都在处理不是我生成的文件(系统文件、从互联网下载的随机文件、供应商提供的随机文件、客户......):这些文件没有提供它们编码的线索正在使用。在多元文化环境(欧洲)中,很难知道这些文件是如何编码的。大多数情况下,即使是提供文件的人也对编码一无所知,这可能是由选择的编辑器/工具在幕后发生的。如何确定逐个文件使用的编码?

4

2 回答 2

27

使用 python 3.3,您可以使用内置的 open 函数

open("myfile",encoding="ISO-8859-1")
于 2014-04-27T08:54:48.183 回答
19

您在open()命令中更改编解码器;ISO-8859 标准有多个编解码器,我在这里为您选择了 Latin-1,但您可能需要选择另一个:

codecs.open('myfile', 'r', 'iso-8859-1').read()

有关有效编解码器的列表,请参阅codecs模块。从粘贴数据来看,iso-8859-1 是正确的编解码器,因为它适用于斯堪的纳维亚文本。

通常,没有其他来源,您无法知道文件使用什么编解码器。充其量,您可以猜测(这是什么file)。

于 2013-06-02T14:00:30.357 回答