昨天测试接口出现有一个接口中文乱码问题,现象:

1 浏览器请求返回显示正常

2 用代码请求接口返回数据中文显示乱码

3 使用的python3,python3默认unicode编码,中文都是可以正常显示的。直接打印中文,其他接口中的中文都正常

百思不得其解,跟开发确认接口编码方式 ,也是是utf-8. 跟其他接口一样

折腾蛮久,最后的解决思路:

1   把浏览器返回的中文进行utf-8加密

2  对比步骤1的加密串 与 乱码的区别,发现两者的字节码是一样的,只是显示形式不同,一个是b'xxx',另一个‘xxx’。终于找到了解决方式

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

the end!

最新文章

  1. 页面内容排序插件jSort的使用
  2. Redis菜鸟汇总
  3. UILabel 的高度根据文字内容调整
  4. mysql和oracle 分页查询(转)
  5. 白书 4.1.2 模运算的世界 P291
  6. vim替换及多行注释命令
  7. 兼容iOS 10 资料整理笔记-b
  8. 一篇关于学C++的感想(拿来与大家分享)
  9. Codeblocks + opencv + Cmake + minGW 环境搭建(一劳永逸版)
  10. Objective-C的反射
  11. mysql双机热备的配置步骤
  12. web学习:Spring2.5+Hibernate3.3+Struts1.3整合小例子
  13. Python ---------- Tensorflow (二)学习率
  14. 坑爹的file_exists
  15. 【Python】 list & dict & str
  16. c++中的回调
  17. Metasploit Framework(8)后渗透测试(一)
  18. Kali学习笔记8:四层发现
  19. confluence 5.8.6升级到5.10.1
  20. 机器学习技法笔记:10 Random Forest

热门文章

  1. hdu1395 2^x mod n = 1(欧拉函数)
  2. PIE SDK均值滤波
  3. JAVA WEB开发环境搭建
  4. 设计模式学习总结(十)责任链模式(Chain Of Responsibility)
  5. 表单提交前的confirm验证提示
  6. fabric 自动创建仓库并下载或更新代码
  7. Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name
  8. 洛谷P1351 联合权值(树形dp)
  9. 关于js 中函数的参数
  10. iDempiere 使用指南 MRP/生产插件 LiberoMFG 源码安装