python3中的urlopen对于中文url是如何处理的?

刚刚看了urllib.parse.quote()的定义,完全可以直接处理中英混排的url,无需单独处理中文再拼接。具体方法:
# -*- coding:utf-8 -*-

from urllib.parse import quote


url = 'http://www.example.com/api.php?text=中文在这里'

# 不带附加参数
print('\n不带附加参数:\n%s' % quote(url))

# 附带不转换字符参数
print('\n附加不转换字符参数:\n%s' % quote(url, safe='/:?='))


作者:知乎用户
链接:https://www.zhihu.com/question/22899135/answer/119088406
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


运行结果:

不带附加参数:
http%3A//www.example.com/api.php%3Ftext%3D%E4%B8%AD%E6%96%87%E5%9C%A8%E8%BF%99%E9%87%8C



附加不转换字符参数:
http://www.example.com/api.php?text=%E4%B8%AD%E6%96%87%E5%9C%A8%E8%BF%99%E9%87%8C


quote可用的参数如下:
quote(string, safe='/', encoding=None, errors=None)

其中的safe参数可用的范围:
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","


作者:知乎用户
链接:https://www.zhihu.com/question/22899135/answer/119088406
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


最简单的处理方式:

首先,url中的中文要单独处理,不能中英文全部合在一起处理(因为一部分的特殊字符也会被处理掉)。其次。在python3.0+中,已经不支持之前的urllib.quote了,而是需要urllib.parse.quote(str)

一种可行的方案
import urllib
s=‘中文’

s=urllib.parse.quote(s)

url='some english url character %s'%(s)

urllib.request.urlopen(url)



作者:孙晓飞
链接:https://www.zhihu.com/question/22899135/answer/23746054
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值