小编And*_*ino的帖子

为什么我不能解码这个 UTF-8 页面?

各位好,

我是使用 python 从网络获取数据的新手。我想在字符串中包含此页面的源代码:https : //projects.fivethirtyeight.com/2018-nba-predictions/

以下代码适用于其他页面(例如https://www.basketball-reference.com/boxscores/201712090ATL.html):

import urllib.request
file = urllib.request.urlopen(webAddress)
data = file.read()
file.close()
dataString = data.decode(encoding='UTF-8')
Run Code Online (Sandbox Code Playgroud)

我希望 dataString 是一串 HTML(在这种特定情况下,我的期望见下文)

<!DOCTYPE html><html lang="en"><head><meta property="article:modified_time" etc etc
Run Code Online (Sandbox Code Playgroud)

相反,对于 538 网站,我收到此错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
Run Code Online (Sandbox Code Playgroud)

我的研究表明问题在于我的文件实际上并未使用 UTF-8 编码,但是页面的字符集和 beautiful-soup 的 UnicodeDammit() 都声称它是 UTF-8(第二个可能是因为第一个)。chardet.detect() 不建议任何编码。我尝试在 decode() 的编码参数中用以下内容替换 'UTF-8' 无济于事:

ISO-8859-1

拉丁语 1

视窗-1252

也许值得一提的是字节数组数据看起来不像我期望的那样。这是来自工作 URL 的 data[:10]:

b'\n<!DOCTYPE'
Run Code Online (Sandbox Code Playgroud)

这是来自 538 站点的数据 [:10]:

b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

python encoding utf-8 character-encoding

4
推荐指数
1
解决办法
429
查看次数

标签 统计

character-encoding ×1

encoding ×1

python ×1

utf-8 ×1