python3 获取接口返回json 中文乱码

转自大佬https://www.javaxxz.com/thread-398009-1-1.html

python3乱码问题:接口返回数据中文乱码问题解决

昨天测试接口出现有一个接口中文乱码问题,现象:
1 浏览器请求返回显示正常
2 用代码请求接口返回数据中文显示乱码
3 使用的python3,python3默认unicode编码,中文都是可以正常显示的。直接打印中文,其他接口中的中文都正常
  
百思不得其解,跟开发确认接口编码方式 ,也是是utf-8. 跟其他接口一样
  
折腾蛮久,最后的解决思路:
1   把浏览器返回的中文进行utf-8加密
2  对比步骤1的加密串 与 乱码的区别,发现两者的字节码是一样的,只是显示形式不同,一个是b"xxx",另一个‘xxx’。终于找到了解决方式
  
 

  1. #-*-coding:utf-8 -*-
  2. """
  3. dinghanhua
  4. 2018-11-09
  5. 解决接口返回数据乱码问题
  6. 现象:浏览器请求接口数据正常,
  7. python3请求接口,返回数据中文显示乱码。
  8. 对比中文utf-8编码和接口返回数据,发现返回数据里字节码前没有加上b
  9. """
  10. """中文utf-8编码,再解码"""
  11. str = "稳定"
  12. print("稳定 utf-8 编码是:",str.encode("utf-8"))
  13. print("稳定 utf-8-sig 编码是:(加了3个前缀)",str.encode("utf-8-sig"))
  14. print("都可以直接通过utf-8 解码:",b"\xe7\xa8\xb3\xe5\xae\x9a".decode("utf-8"),
  15.       b"\xef\xbb\xbf\xe7\xa8\xb3\xe5\xae\x9a".decode("utf-8"))
  16. """utf-8编码串拷出来为啥显示乱码"""
  17. str = b"\xe7\xa8\xb3\xe5\xae\x9a"
  18. print("写了b,显示正常: ",str,str.decode("utf-8"))
  19. str_without_b = "\xe7\xa8\xb3\xe5\xae\x9a"
  20. print("少了前面的b,打出来显示乱码: ", str_without_b)
  21. print("实际上也就是ascii编码:",ascii("稳å®"))
  22. """问题解决方式:用raw_unicode_escape编码"""
  23. str = str_without_b.encode("raw_unicode_escape")
  24. print("raw_unicode_escape 编码后:",str)
  25. print("再用utf-8解码:",str.decode("utf-8"))

 

rsp = requests.post(...)

json1 = rsp.text.encode("raw_unicode_escape").decode("utf-8")

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值