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

本文详细记录了解决Python3请求接口返回数据中文乱码的问题。现象为浏览器请求正常,而Python请求则显示乱码。经过对比分析,发现乱码问题是由于返回数据缺少字节标识'b'。最终通过使用raw_unicode_escape编码解决该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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

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!

转载于:https://www.cnblogs.com/dinghanhua/p/9933000.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值