python 使用urllib2进行https请求时出现'ascii' codec can't decode byte 0xe9 错误
2017-09-27 10:36
399 查看
最近在开发公众号,其中进行到菜单开发时,使用urllib模块通过官方提供的https链接进行创建菜单操作:
调用create()进行创建操作之后,出现ssl:unknown错误提示,查找原因,说是http和https运行不能共用一个端口。有点不明觉厉。。。这个时候我并没有运行http请求啊,不应该存在端口冲突啊。百思不得其解,所以,我就换个路径,把urllib换成了urllib2试了试。
运行之后发现,好像有那没点不一样了,最起码错误类型不一样了,ssl错误不见了,变成了'ascii' codec can't decode byte 0xe9 in position 100: ordinal not in range(128)。这个错误算是比较常见的python编码错误了,python初始默认编码是ascii编码,在与其他编码进行转换时,中间采用unicode编码,就在这个过程中出现了错误:unicode编码最大只有128位,所以当尝试将ascii编码转换成unicode编码时出现了超出范围,不能编码的错误。知道了原因,就可以修改了。
在代码开始添加如下一段代码,作用是设置python默认编码为utf-8编码格式。
这样就不会存在转换编码格式错误的问题了。
这个方法仅仅针对单个文件起着作用,还可以在python安装文件的site-packages/目录下添加一个sitecustomize.py文件,内容如下:
这个针对所有文件都有效。
def create(self, postData, accessToken): postUrl = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=%s" % accessToken if isinstance(postData, unicode): postData = postData.encode('utf-8') urlResp = urllib.urlopen(url=postUrl, data=postData) print urlResp.read()
调用create()进行创建操作之后,出现ssl:unknown错误提示,查找原因,说是http和https运行不能共用一个端口。有点不明觉厉。。。这个时候我并没有运行http请求啊,不应该存在端口冲突啊。百思不得其解,所以,我就换个路径,把urllib换成了urllib2试了试。
def create(self, postData, accessToken): postUrl = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=%s" % accessToken if isinstance(postData, unicode): postData = postData.encode('utf-8') urlResp = urllib2.urlopen(postUrl, data=postData) print urlResp.read()
运行之后发现,好像有那没点不一样了,最起码错误类型不一样了,ssl错误不见了,变成了'ascii' codec can't decode byte 0xe9 in position 100: ordinal not in range(128)。这个错误算是比较常见的python编码错误了,python初始默认编码是ascii编码,在与其他编码进行转换时,中间采用unicode编码,就在这个过程中出现了错误:unicode编码最大只有128位,所以当尝试将ascii编码转换成unicode编码时出现了超出范围,不能编码的错误。知道了原因,就可以修改了。
在代码开始添加如下一段代码,作用是设置python默认编码为utf-8编码格式。
import sys defaultencoding = 'utf-8' if sys.getdefaultencoding() != defaultencoding: reload(sys) sys.setdefaultencoding(defaultencoding)
这样就不会存在转换编码格式错误的问题了。
这个方法仅仅针对单个文件起着作用,还可以在python安装文件的site-packages/目录下添加一个sitecustomize.py文件,内容如下:
import sys
sys.setdefaultencoding(defaultencoding)
这个针对所有文件都有效。
相关文章推荐
- python 处理中文时出现的错误'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决方法
- python 处理中文时出现的错误'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决方法
- python处理字符串时出现的错误'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决方法
- 解决Python字符串处理出现错误UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe4 in position 108: ordinal not in range(128)
- Python字符串处理出现错误:UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe6 in position 0: ordinal not
- 解决 Python 出现的UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9
- python - 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)
- python编码错误UnicodeDecodeError: 'ascii'/'utf-8' codec can't decode byte 0xb8 in position 50: ord
- 解决使用中文出现UnicodeDecodeError: 'ascii' codec can't decode byte 的问题
- Windows下使用pip安装python包是报错-UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0
- python错误 unicodedecodeerror ascii codec can’t decode byte 0xd7 in position 9 ordinal not in range(12
- Python安装setuptools遇到错误:UnicodeDecodeError : 'ascii' codec can't decode byte 0xe0 in position 0
- 使用pyinstaller生成可执行文件出现UnicodeDecodeError: 'ascii' codec can't decode byte 0xb3 in position 12
- Python之——UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0 解决办法
- Python各种错误之 UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 33: ordinal not in
- 【Python错误】 'ascii' codec can't decode byte 0xe7 in position 0: ordinal not in range(128)
- python 3以上版本使用pickle.load读取文件报UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 6
- 下载android源码时,UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 26: 错误
- python出现 'ascii' codec can't decode byte 0xXX in position XX: ordinal not in range(128)问题
- python27在cmd命令行中出现UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position