我在理解Python中的错误时遇到问题

我在理解Python中的错误时遇到问题,python,unicode,encoding,Python,Unicode,Encoding,我试图打开一个基本的file.txt文件,它与我的python解释器位于同一个CWD中 所以我做了a=open(“file.txt”,“r”) 然后我想显示它的内容(里面只有一个测试行,像helloworld) 所以我做了content=a.read() 所以你知道,当我输入aenter时,我有: a 那我就错了,我不明白。有人知道如何解决这个问题吗 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 contenu=a.read() 文件“/Library/Frameworks/Pytho

我试图打开一个基本的
file.txt
文件,它与我的python解释器位于同一个
CWD

所以我做了
a=open(“file.txt”,“r”)

然后我想显示它的内容(里面只有一个测试行,像
helloworld

所以我做了
content=a.read()

所以你知道,当我输入
a
enter时,我有:

a
那我就错了,我不明白。有人知道如何解决这个问题吗

回溯(最近一次呼叫最后一次):
文件“”,第1行,在
contenu=a.read()
文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/codecs.py”,第322行,在decode中
(结果,消耗)=自身缓冲区解码(数据,自身错误,最终)
UnicodeDecodeError:“utf-8”编解码器无法解码位置15中的字节0xc6:无效的连续字节

您的文件可能没有用UTF-8编码。尝试:

from chardet import detect

with open("file.txt", "rb") as infile:
    raw = infile.read()

    encoding = detect(raw)['encoding']  
    print(encoding)

您的文件未使用UTF-8编码。编码由用于创建文件的工具控制。确保使用正确的编码

下面是一个例子:

>>> s = 'Sébastien Chabrol'
>>> s.encode('utf8')             # é in UTF-8 is encoded as bytes C3 A9.
b'S\xc3\xa9bastien Chabrol'
>>> s.encode('cp1252')           # é in cp1252 is encoded as byte E9.
b'S\xe9bastien Chabrol'
>>> s.encode('utf8').decode('1252')  # decoding incorrectly can produce wrong characters...
'Sébastien Chabrol'
>>> s.encode('cp1252').decode('utf8') # or just fail.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 1: invalid continuation byte
在Python 2或3上,还可以使用向后兼容的语法:

import io
a = io.open('file.txt','r',encoding='utf8')
如果您不知道编码,可以以二进制模式打开以查看原始字节内容,并至少进行猜测:

a = open('file.txt','rb')
print(a.read())

在此处阅读有关Python和编码的更多信息:

您能告诉我们您的文件到底包含什么吗?此错误表示文件中存在无效字符-具体地说,是文件中的第十五个字符。解决了这个问题,这个应该可以正常运行。你能在终端中运行
文件-I fichier.txt
并告诉我们输出吗?尝试读取一个带有基本字符的常规txt文件,看看内容是否有问题总是好的。好的,所以我做了一个扩展名为.rtf的新文档。里面的文字是“这个文件是普通的,它只包含字母和点。”。现在python似乎可以读取它,但不能正确显示其中的内容。相反,我看到的是“{\\rtf1\\ansi\\ansicpg1252\\cooartf1671\\cocooasubrtf200\n{\\fonttbl\\f0\\fswiss\\fcharset0 Helvetica;}\n{\\colortbl;\\red255\\green255\\blue255;}\n{\*\\expandedcolortbl;;}\n\\paperw11900\\paperh16840\\margl1440\\margr1440\\view10800\\viewh8400\\viewkind0\n\\pard\\tx566\\tx1133\\tx1700\\tx2267\\tx2834\\tx3401\\tx3968\\tx4535\\tx5102\\tx5669\\tx6236\\tx683\\pardirnatural\\partitionnfactor0\n\n\\f0\\f0\\fs24\\cf0此文件是普通文件。它只包含字母和点。}'您必须先安装chardet
pip3
我没有“chardet”软件包。我真的不知道如何下载它并将其链接到我的python。我是btwOpen up Terminal.app的初学者。您现在处于bash提示符中。它类似于屏幕截图中的python提示符,但用于控制计算机。当您安装Python时,它会安装一个名为
pip3
(3是因为这是Python 3)的bash命令,用于安装软件包。要安装软件包,请键入
pip3 install
。在这种情况下,
pip3安装chardet
。如果运行成功,当您返回python提示符时,可以执行
import chardet
from chardet import detect
a = open('file.txt','rb')
print(a.read())