如何阅读"C源,ISO-8859文本"

dan*_*ast 10 python unicode

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

import codecs
codecs.open('myfile', 'r', 'utf-8').read()
Run Code Online (Sandbox Code Playgroud)

但这给了:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xe5 in position 7128: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)

如果我检查文件:

» file myfile
myfile: C source, ISO-8859 text
Run Code Online (Sandbox Code Playgroud)
  • 如何在python中读取那种文件(ISO-8859)?
  • 在一般情况下,我怎么知道文件是如何编码的?

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

Dav*_*ang 15

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

open("myfile",encoding="ISO-8859-1")
Run Code Online (Sandbox Code Playgroud)

  • 我花了 15 分钟的谷歌搜索才找到这个简单的解决方案。谢谢! (2认同)

Mar*_*ers 13

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

codecs.open('myfile', 'r', 'iso-8859-1').read()
Run Code Online (Sandbox Code Playgroud)

有关有效编解码器的列表,请参阅codecs模块.根据pastie数据判断,iso-8859-1是正确使用的编解码器,因为它适用于斯堪的纳维亚文本.

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