关于python中使用urllib传递以及接收中文数据的问题

本文介绍如何在Python中使用urllib库正确处理中文数据的传输。针对Python 2版本,详细解释了从中文字符串到URL编码的过程,并提供了具体实例说明如何避免ERROR:NON-ASCII错误。同时对比了Python 3中对应方法的变化。

关于python中使用urllib传递以及接收中文数据的问题

在使用python2版本下的urllib传递中文数据的时候出现了报错,ERROR:NON-ASCII 是因为url中包含了中文字符。把他转为utf-8编码传递即可

info = u"中文"
urllib.urlopen("http://1.2.3.4:8000?" + info.encode('utf-8'))

这样子传递过去的数据在接收的时候,会自动把编码成utf-8的中文再转成url编码
接收到的数据可能就是 %e4%b8%ad%e6%96%87 这是“中文”对应的url编码
接收数据后的处理方式是这样的:

import urllib
info = "%e4%b8%ad%e6%96%87"
print(urllib.unquote(info).decode("utf-8"))

把url编码通过unquote解码成传递过来的utf-8编码,再把utf-8编码解码成中文即可。
其实过程就是 中文数据(无法直接传递,报错:ERROR:NON-ASCII)-》utf-8-》url编码(这一步由url发送数据时自动完成)-》传递数据-》接收数据-》url解码-》utf-8解码-》中文数据
在python3中unquote方法可能是用urllib.parse.unquote()来代替,答主使用的是python2.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值