zoukankan      html  css  js  c++  java
  • python3乱码问题:接口返回数据中文乱码问题解决

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

    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'xe7xa8xb3xe5xaex9a'.decode('utf-8'),
          b'xefxbbxbfxe7xa8xb3xe5xaex9a'.decode('utf-8'))
    
    '''utf-8编码串拷出来为啥显示乱码'''
    str = b'xe7xa8xb3xe5xaex9a'
    print('写了b,显示正常: ',str,str.decode('utf-8'))
    
    str_without_b = 'xe7xa8xb3xe5xaex9a'
    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!

  • 相关阅读:
    java面试②基础部分
    java面试①整体流程
    Mysql加锁过程详解(6)-数据库隔离级别(2)-通过例子理解事务的4种隔离级别
    Mysql加锁过程详解(6)-数据库隔离级别(1)
    CV3——学习笔记-实战项目(上):如何搭建和训练一个深度学习网络
    CV2——学习笔记-图像分类
    CV1——学习笔记
    思无邪
    C++学习笔记
    操作系统——学习笔记
  • 原文地址:https://www.cnblogs.com/dinghanhua/p/9933000.html
Copyright © 2011-2022 走看看