python3亂碼問題:接口返回數據中文亂碼問題解決

 

昨天測試接口出現有一個接口中文亂碼問題,現象:python

1 瀏覽器請求返回顯示正常瀏覽器

2 用代碼請求接口返回數據中文顯示亂碼測試

3 使用的python3,python3默認unicode編碼,中文都是能夠正常顯示的。直接打印中文,其餘接口中的中文都正常編碼

 

百思不得其解,跟開發確認接口編碼方式 ,也是是utf-8. 跟其餘接口同樣加密

 

折騰蠻久,最後的解決思路:spa

1   把瀏覽器返回的中文進行utf-8加密code

2  對比步驟1的加密串 與 亂碼的區別,發現二者的字節碼是同樣的,只是顯示形式不一樣,一個是b'xxx',另外一個‘xxx’。終於找到了解決方式blog

 

#-*-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!接口

相關文章
相關標籤/搜索