Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何阅读“a”;C来源,ISO-8859文本“;_Python_Unicode - Fatal编程技术网

Python 如何阅读“a”;C来源,ISO-8859文本“;

Python 如何阅读“a”;C来源,ISO-8859文本“;,python,unicode,Python,Unicode,我有这个(我已经粘贴了,我希望有问题的相关数据在复制/粘贴过程中幸存下来)。我尝试通过以下方式读取该文件: 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:

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

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)
  • 在一般情况下,我如何知道文件是如何编码的

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

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

codecs.open('myfile', 'r', 'iso-8859-1').read()
有关有效编解码器的列表,请参阅。根据pastie数据判断,iso-8859-1是正确的编解码器,因为它适用于斯堪的纳维亚文本


通常,如果没有其他来源,您无法知道文件使用的编解码器。充其量,您可以猜测(这就是
文件所做的)。

对于Python3.3,您可以使用内置的open函数

open("myfile",encoding="ISO-8859-1")

你放在pastebin.com上的文件没有保留你遇到问题的字节。奇怪:目视检查告诉我它们在那里(第151行)啊,的确,但是数据是UTF8编码的,所以我打开文件时使用的拉丁-1编码不介意,UTF8也没有失败。:-)您的浏览器在使用自己的猜测器后,一定调整了编码。谢谢。这真是不幸。这是unicode的设计缺陷吗?我的意思是,有一个文件编码,但没有办法告诉什么编码的文件使用罢工我作为一个严重的缺点。当我的工具在生产中运行时,我不会在那里手动更改编解码器。我必须保留
文件:编码的单独映射吗?我是否应该总是尝试列出可能的编解码器?我可以有误报吗?这与Unicode无关;文件格式的一个缺陷是没有包含所使用的编解码器。如果你尝试所有的编解码器,你会遇到误报,是的,很可能是误报,而不是使用正确的编解码器。你可以试着做一个更有教育意义的猜测。正确的。使用unicode时文件格式存在缺陷。打开非unicode文件不会引起麻烦。这是什么(错了?)让我觉得unicode是罪魁祸首。我认为在没有嵌入有关所用编解码器的信息的情况下开始分发unicode编码的文件是一个错误。unicode是一种标准,而不是一种编码。有非unicode文件这样的东西;大多数你没有问题的文本都是ASCII编码的;但对于更广阔的世界来说,这根本不够表达。您可能想了解Unicode的含义:。源代码文件只是纯文本文件,这种格式起源于计算机没有像今天这样连接,互操作性也不受关注的时代。我花了15分钟的时间在谷歌上找到了这个简单的解决方案。谢谢