0

我试图使用 urllib2 下载网页并将其保存到 MySQL 数据库。像这样 :

result_text = result.read()
result_text = result_text.decode('utf-8')

但是我收到此错误:

数据:“utf8”编解码器无法解码字节 0x88

现在,HTML 元标记表明编码确实是 utf-8。我设法用这条线解决了这个问题:

result_text = result_text.decode('utf-8','replace')

它替换了坏字符。但是,我不确定这是否表明下载的数据可能有问题,或者我正在删除有价值的字符。IU 应该补充说该页面还包含 JavaScript - 尽管我相信这不应该是一个问题。

谁能告诉我为什么会这样?谢谢

4

1 回答 1

0

分析您的微小数据样本:

>>> s = "\x98cW\x01\xa2\xbb\xba\xcc\xec\x90\xfc\xffP\xcb%\x01\x08"
>>> u = s.decode('utf8', 'replace')
>>> u
u'\ufffdcW\x01\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffdP\ufffd%\x01\x08'
>>> u.count(u'\ufffd')
9
>>> len(u)
16

(1) 那肯定不是带有偶尔无效序列的 UTF-8;超过 50% 的 Unicode 字符无效。换句话说,向前推进并使用data.decode('utf8', 'replace')不是一个好主意(基于this TINY sample)。

(2)字符\x01(两次)\x08让我怀疑你以某种方式获得了二进制数据。

(3) 您在提到的评论中引用的(截断的)错误消息,0x880x88示例数据中没有。

(4) 请编辑您的问题以显示您在开始时应该做的事情:(a) 重现问题所需的最少代码,包括您正在访问的 URL (b) 完整的错误消息和回溯 (c)确保您已复制/粘贴 (a) 和 (b) 而不是凭记忆输入

于 2012-01-29T20:34:49.670 回答