使用Python读取.htm文件时的编码问题

时间:2018-12-18 00:00:52

标签: python html beautifulsoup

我正在尝试使用Python读取大量.htm文件。为此,我使用以下内容:

HtmlFile = codecs.open(file, 'r')
text = BeautifulSoup(HtmlFile.read()).text

但是,这将导致以下错误:

UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 411: 
character maps to <undefined>

因此,我尝试使用utf-8进行编码,如下所示:

HtmlFile = codecs.open(file, 'r', encoding='utf-8')
text = BeautifulSoup(HtmlFile.read()).text

然后我收到此错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 4565: 
invalid start byte

我尝试遵循建议here,但没有帮助。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

我已经做了一些研究,这是Microsoft使用CP1252编码生成的文件的问题,但是有些事情没有正确提取。给出以下内容:

<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=Generator content="Microsoft Word 15 (filtered)">

在您的html文件中,这似乎很有可能。

根据此answer,如果您在该示例中使用Latin-1编码,则可能会有所帮助:

HtmlFile = codecs.open(file, 'r', encoding='latin-1')
text = BeautifulSoup(HtmlFile.read()).text

让我知道是否可行。请注意,Latin-1并不具有Microsoft编码所具有的所有字符。