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'\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!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM