POST从网页中获取数据,由于编码问题,出现乱码。
方法:
```
response = session.get('http://xxxx')
print(response.encoding)
response.encoding = 'utf-8'
print(response.json())
```
原因:
1.由于数据源的编码声明不规范,reuqests无法确定返回数据的正确编码,所以使用其默认编码iso8859-1对数据进行转换
为 unicode,没使用正确的编码 utf-8,于是就出现乱码了。
解决办法一就是手动设置返回数据的正确编码:response.encoding = 'utf-8'。这样结果就是正确的 unicode 类型字符串。
或者将错误的 unicode 转换回具有相同 iso8859-1 编码的原始 utf-8 编码 str 类型字符串:data.encode('iso8859-1')。
2.(没看懂,反正就是这个意思。编码真的是个大坑!)Python中字符串其实有两种,str类型和unicode类型,两者都是
basestring的派生类。str实际上相当于string, 而unicode则是标准的字符串,相当于wstring。
其中,I/O 读取基本都是 str 类型,也就是说 Python 并不关心这些字节代表什么。但是如果需要做真正的字符串操作,建议使用
unicode类型,这样确保不存在编码问题。
JSON 理论上应该完全用 ASCII 表示,宽字符的形式类似于 \u1111。但是现在有很多非标准的JSON,比如s="""{"title":
"Hello, world"}"""。此时需要确定这部分内容以字节表示时使用的是什么编码。如果是UTF-8,那么第一个
s_u=s.decode("UTF-8")变成unicode字符串。
另一方面,只要这个字符串的编码与Python运行环境的编码一致,也可以直接加载(str类型变量)。例如在 Linux 下如果
LANG是UTF-8的,所以python运行的时候可以直接插入UTF-8编码的JSON字符串。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python3中re模块的简单介绍和使用01/12
- ♥ python如何解析json字符串11/02
- ♥ python使用OpenCV给图片添加文字12/04
- ♥ 在python3中如何编写扩展列表的代码?01/10
- ♥ python函数装饰器的应用流程11/14
- ♥ python正则表达式问号的使用12/06
内容反馈