在Python3中读取文件时编码错误?

在Python3中读取文件时编码错误?,python,python-3.x,utf-8,Python,Python 3.x,Utf 8,当我用python读取一个文件并将其打印到屏幕上时,它无法正确地读取某些字符,但是,那些硬编码为变量的字符可以很好地打印出来。下面是一个示例,“test.html”包含文本“Hallå”: 这将生成以下输出: hallÃ¥ Hallå 我的猜测是,在将文件中的数据读入Python时,如何解释文件中的数据有问题,但是我不确定它是什么,因为Python 3.8.5默认情况下已经使用UTF-8编码。函数open默认情况下是否使用UTF-8。正如t所说: 在文本模式下,如果未指定编码,则使用的编码取决

当我用python读取一个文件并将其打印到屏幕上时,它无法正确地读取某些字符,但是,那些硬编码为变量的字符可以很好地打印出来。下面是一个示例,“test.html”包含文本“Hallå”:

这将生成以下输出:

hallå
Hallå

我的猜测是,在将文件中的数据读入Python时,如何解释文件中的数据有问题,但是我不确定它是什么,因为Python 3.8.5默认情况下已经使用UTF-8编码。

函数
open
默认情况下是否使用UTF-8。正如t所说:

在文本模式下,如果未指定编码,则使用的编码取决于平台:
locale。调用getpreferredencoding(False)
以获取当前的locale编码

因此,这取决于具体情况,而且可以肯定的是,您必须自己指定编码。如果文件以UTF-8格式保存,则应执行以下操作:

with open('test.html', 'r', encoding='utf-8') as file:

另一方面,不清楚文件是否以UTF-8编码保存。如果不是,则必须选择另一个。

函数
open
默认情况下不使用UTF-8。正如t所说:

在文本模式下,如果未指定编码,则使用的编码取决于平台:
locale。调用getpreferredencoding(False)
以获取当前的locale编码

因此,这取决于具体情况,而且可以肯定的是,您必须自己指定编码。如果文件以UTF-8格式保存,则应执行以下操作:

with open('test.html', 'r', encoding='utf-8') as file:

另一方面,不清楚文件是否以UTF-8编码保存。如果不是,则必须选择另一个。

更改
open()
编码
参数-例如,
使用open('test.html','r',encoding='…')作为文件:
。这要求您事先知道文件的编码,尽管您可能对文件编码不正确。您能告诉我们当您使用Python将
“Hallå”
写入文件时会发生什么吗?这可能是重复的。
locale.getdefaultencoding()
说了什么?这与文件的预期编码相比如何?能否以二进制打开文件并发布其内容
print(open('test.html','rb').read()
?将它添加到
getdefaultencoding
所说的内容中,我们就可以进行实验了。看起来我对默认编码的看法是错误的,它现在起作用了,我已经标记了正确的答案。更改
open()
参数-例如使用open('test.html',r',encoding='…'))作为文件:
。这要求您事先知道文件的编码,尽管您可能对文件编码不正确。您能告诉我们当您使用Python将
“Hallå”
写入文件时会发生什么情况吗?这可能是一个副本。
locale.getdefaultencoding()
say,这与文件的预期编码相比如何?能否以二进制打开文件并发布其内容
print(open('test.html','rb').read()
?将它添加到
getdefaultencoding
所说的内容中,我们就可以进行实验了。看来我对默认编码的看法是错误的,它现在起作用了,我已经标记了正确的答案。