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的更多相关文章

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

    Django项目在访问Restful service时调用urllib.urlencode编码中文字符串时碰到下面这个错误. v = quote_plus(str(v)) UnicodeEncodeE ...

  2. 关于python中urllib.urlencode的时候出错:UnicodeEncodeError: ‘ascii’的记录

    原文我参见了:http://hi.baidu.com/setcookie/item/ddc6b694b1f13435336eeb3c 为毛我要费事的写下了,就是为了让自己记录一下,下面的也是直接摘录过 ...

  3. Python把json格式的string对象转变成dict对象操作、Python3不能使用urllib2、urllib.parse.urlencode(params).encode(encoding='UTF8')

    son格式的string对象转变成dict对象操作 content=eval(content)#json字典转化 Python3不能使用urllib2 直接使用urllib.request替换urll ...

  4. web.py+mysql插入中文提示query = query.encode(charset) UnicodeEncodeError: 'latin-1' codec can't encode characters in position 86-100

    对于中文编码的问题,总会出现各种各样恶心的错误,还不知道应该怎么解决,首先,你从最开头就应该关注编码问题,尽量保证所有的编码方式都是一致的 用python+web.py+mysql来写程序,首先要保证 ...

  5. 为什么请求时,需要使用URLEncode做encode转码操作(转)

    什么要对url进行encode 发现现在几乎所有的网站都对url中的汉字和特殊的字符,进行了urlencode操作,也就是: http://hi.baidu.com/%BE%B2%D0%C4%C0%C ...

  6. asp对中文编码及解码,Decode和Encode中文网址处理

    <%'-------------------------------------------------------------------------- '================== ...

  7. [TimLinux] django CentOS7中django+httpd+mod_wsgi中文UnicodeEncodeError错误

    1. 错误 web端访问页面,页面内的view函数要写一个含有中文名字的文件,出现了这个错误.在PyCharm开发调皮环境中不存在这样的错误,把系统部署到http, mod_wsgi时出现. 2. 定 ...

  8. 一个PHP混淆后门的分析

    洒家的朋友的公司的某个站发现最近被上传了一个后门程序.为了取证我们抓取了HTTP请求流量,看到了一堆莫名其妙看似经过混淆的请求,响应也是看似base64的乱码.洒家用了2个小时静态分析了一遍,并写了利 ...

  9. 一个用python实现的东方时尚(驾校)抢课程序

    2014-12-23 东方时尚约车还要网上选课,资源太紧张了,于是我决定自己写一个抢票程序来帮我刷票. 第一步,抓包.浏览器登陆选课系统,用抓包工具观察网络行为,这里我用的fildder.这里抓包主要 ...

随机推荐

  1. 手把手教你AndroidStudio多渠道打包

    最近不断有朋友向我咨询AndroidStudio多渠道的打包方法,今天整理一下之前积累的打包套路,写一篇文章,手把手的教给大家.        说到多渠道,这里不得不提一下友盟统计,友盟统计是大家日常 ...

  2. 联想台式机启天m4350 启用intel vt-x

    在vmware workstations10 64位上安装windows server 2012操作系统时,出现例如以下错误: 已将该虚拟机配置为使用 64 位客户机操作系统.可是,无法运行 64 位 ...

  3. apache的order allow deny

    这个东西确实挺容易让我们迷糊.其实也不难,只要你掌握这样一条规律即可:首先举个例子: Order deny,allowdeny  from allallow from 127.0.0.1 我们判断的依 ...

  4. java读取properties文件,并在配置文件中设置默认浏览器驱动

    java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properti ...

  5. 2016.6.30 tomcat开启时,显示端口被占用,如何修改端口

    开启tomcat时,有时候会显示端口8080已占用,所以需要将端口改为其他值. 找到tomcat的server.xml文件,修改为8088,如图所示:

  6. MySQL日期函数的用法几则

    1.将Date类型变成年月日时分秒的形式 select date_format(claimDate,'%Y-%m-%d %H:%i:%s') as claimdate from t1 2.只要年月日的 ...

  7. Python&lt;1&gt;List

    list里的元素以逗号隔开,以[]包围,当中元素的类型随意 官方一点的说:list列表是一个随意类型的对象的位置相关的有序集合. 它没有固定的大小(1).通过对偏移量 (2)进行赋值以及其它各种列表的 ...

  8. C#程序不包含适合于入口点的静态“Main”方法怎么办

    如下图所示,一般程序上次运行还好好的,而且不管你复制粘贴再简单的程序也出现这种错误提示.   先点击右侧的显示所有文件,下面列举了所有CS文件,右击点击包括在项目中,则该文件呈现绿色,再运行即可.不过 ...

  9. 3、Linux内核模块学习

    一.内核模块的学习   内核的整体框架是非常的大,包含的组件也是非常多,如何将需要的组件包含在内核中呢?选择一,就是将所有的组件全部编译进内核,虽然需要的组件都可以使用,但是内核过分庞大,势必带来效率 ...

  10. ar命令提取.o的时候报错:is a fat file (use libtool(1) or lipo(1) and ar(1) on it)

    在解压.a文件的时候,报错:s a fat file (use libtool(1) or lipo(1) and ar(1) on it),原因是该.a文件包含了多个cpu架构,比如armv7,ar ...