gpt4 book ai didi

python - 当url包含非英语语言时如何使用pycurl?

转载 作者:太空宇宙 更新时间:2023-11-03 19:11:50 25 4
gpt4 key购买 nike

这是 pycurl 的 sourceforge 页面上的示例。而如果url中包含类似中文的内容。我们应该做什么流程?既然pycurl不支持unicode?

import pycurl
c = pycurl.Curl()
c.setopt(pycurl.URL, "http://www.python.org/")
c.setopt(pycurl.HTTPHEADER, ["Accept:"])

import StringIO
b = StringIO.StringIO()
c.setopt(pycurl.WRITEFUNCTION, b.write)
c.setopt(pycurl.FOLLOWLOCATION, 1)
c.setopt(pycurl.MAXREDIRS, 5)
c.perform()
print b.getvalue()

最佳答案

这是一个演示三个独立问题的脚本:

  • Python 源代码中的非 ASCII 字符
  • 网址中包含非 ASCII 字符
  • html 内容中的非 ascii 字符
# -*- coding: utf-8 -*-
import urllib
from StringIO import StringIO
import pycurl

title = u"UNIX时间" # 1
url = "https://zh.wikipedia.org/wiki/" + urllib.quote(title.encode('utf-8')) # 2

c = pycurl.Curl()
c.setopt(pycurl.URL, url)
c.setopt(pycurl.HTTPHEADER, ["Accept:"])

b = StringIO()
c.setopt(pycurl.WRITEFUNCTION, b.write)
c.setopt(pycurl.FOLLOWLOCATION, 1)
c.setopt(pycurl.MAXREDIRS, 5)
c.perform()

data = b.getvalue() # bytes
print len(data), repr(data[:200])

html_page_charset = "utf-8" # 3
html_text = data.decode(html_page_charset)
print html_text[:200] # 4

注意:代码中所有utf-8都是完全独立的。

  1. Unicode 文字使用您在文件顶部。确保您的文本编辑器尊重该设置

  2. url 中的路径应先使用 utf-8 进行编码百分比编码(urlencoded)

  3. 有多种方法可以找到 html 页面的字符集。看 Character encodings in HTML 。一些库如requests @Oz123提到自动执行:

    # -*- coding: utf-8 -*-
    import requests

    r = requests.get(u"https://zh.wikipedia.org/wiki/UNIX时间")
    print len(r.content), repr(r.content[:200]) # bytes
    print r.encoding
    print r.text[:200] # Unicode
  4. To print Unicode to console你可以使用 PYTHONIOENCODING environment variable设置您的终端可以理解的字符编码

另请参阅The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)和 Python 特定的 Pragmatic Unicode .

关于python - 当url包含非英语语言时如何使用pycurl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12721586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com