urllib.urlencode() 无法encode中文, UnicodeEncodeError

Posted AmilyAmily

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了urllib.urlencode() 无法encode中文, UnicodeEncodeError相关的知识,希望对你有一定的参考价值。

urllib.urlencode() 无法encode中文, UnicodeEncodeError, 具体错误内容如下:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 1326, in urlencode
v = quote_plus(str(v))

UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 0-2: ordinal not in range(128)

引发此错误代码:

#encoding=utf-8
import urllib
url_dict = {"name": u"张三哥", "age": 20}
print "http://xxx.yyy.com?%s" % urllib.urlencode(url_dict)

函数urlencode不会改变传入参数的原始编码,也就是说需要在调用之前将post或get参数的编码调整好,采用encode方法:

#encoding=utf-8
import urllib
url_dict = {"name": u"张三哥".encode(‘gb2312‘), "age": 20}
print "http://xxx.yyy.com?%s" % urllib.urlencode(url_dict)

Result:

http://xxx.yyy.com?age=20&name=%D5%C5%C8%FD%B8%E7

用gb2312编码是可以的, 如上所示, 如果我用utf-8来encode呢? 其实也是可以的, 主要看在哪里使用, 注: baidu使用的是gb2312编码,google使用的是utf8编码,两个站点提交到URL中的中文参数的urlencode值是不一样

参考资料:

参考一: python urlencode编码

参考二: python编码转换

以上是关于urllib.urlencode() 无法encode中文, UnicodeEncodeError的主要内容,如果未能解决你的问题,请参考以下文章

Python,反函数 urllib.urlencode

urllib使用四--urlencode

Python,与函数urllib.urlencode相反

urlencode浏览器地址编码格式

python3 AttributeError: module 'urllib' has no attribute 'urlencode'

Python中urllib.urlencode中文字符的一个问题