【问题标题】:Encoding problem downloading HTML using mechanize and Python 2.6使用 mechanize 和 Python 2.6 下载 HTML 的编码问题
【发布时间】:2010-09-27 14:03:58
【问题描述】:
browser = mechanize.Browser()
page = browser.open(url)
html = page.get_data()

print html

它显示了一些奇怪的字符。我想它是 UTF-8 字符串,但 Python 不知道,无法正确显示。

如何将此字符串转换为 unicode 字符串,如

u = u'test'

【问题讨论】:

  • 告诉我们网址或页面上出现的一些奇怪字符。截至您的UnicodeDecodeError,该文档绝对不是正确的UTF-8。

标签: python unicode encoding utf-8 mechanize


【解决方案1】:

它被压缩了

def ungzipResponse(r,b):
    headers = r.info()
    if headers['Content-Encoding']=='gzip':
        import gzip
        gz = gzip.GzipFile(fileobj=r, mode='rb')
        html = gz.read()
        gz.close()
        headers["Content-type"] = "text/html; charset=utf-8"
        r.set_data( html )
        b.set_response(r)

response = browser.open(url)
ungzipResponse(response, browser)
html = response.read()

【讨论】:

  • 根据您要执行的操作,您应该真正使用现有的库来为您处理此类低级内容。
  • 我试图找到如何让它变得更容易,但这似乎是最简单的解决方案。
【解决方案2】:
u = html.decode('utf-8')

【讨论】:

  • UnicodeDecodeError: 'utf8' codec can't decode byte 0x8b in position 1: unexpected code byte
  • 那么它不是utf-8。您应该检查标题以查看返回的字符集。
  • facebook.com,内容类型:文本/html; charset=utf-8
  • @how:将输出保存到文件并在支持 UTF 的编辑器中打开它,或者使用十六进制编辑器查看 mechanize 返回的是否真的是 UTF-8。
  • 对不起,它被压缩了。忘记解压缩 :)
【解决方案3】:

您需要定义编码 喜欢:

#!/usr/bin/python
# -*- coding: iso-8859-15 -*-

机械化需要它。

欲了解更多信息,请查看此 http://www.python.org/dev/peps/pep-0263/

【讨论】:

  • 但你需要:# -- 编码:iso-8859-15 -- 不是# -- 编码:utf-8 -- –
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-28
相关资源
最近更新 更多