今天在进行测试时,发现当body中有中文时,调用urllib.urlencode(body)时,报UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 真是头大了
以前也遇到过类似python编码的问题,后悔没有做总结,~~~~~~~~~~~~~~
前提:
urllib库中urlencode函数,可以把key-value的键值对转换成application/x-www-form-urlencoded,返回的是类似这样的a=1&b=2字符串
通过打印body参数,发现已经转换成unicode,但是还是报错。
按道理来讲,只要是unicode的编码,urlencode应该是支持,但是,。。。。。。。。。。。。。。。。
最后,这样,
def process_encode(self, body): keys=[] values=[] for k in body.keys(): if isinstance(body[k], unicode): keys.append(k) values.append(body[k].encode('utf-8')) else: keys.append(k) values.append(str(body[k]).decode('utf-8')) #print dict(zip(keys, values)) return dict(zip(keys, values))
先进行 encode,最后果然行了。
总结:
对于Python中的编码,真的被搞死了,遇到很多次这类错误了,结果还是不能完全避免以后再犯类似的错误。
简单原则:不要对str使用encode,不要对unicode使用decode (本文中,对unicode进行encode, 对str进行decode)
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于