日誌分析之python編碼記錄

最近在公司做一個管理系統,其中有一部分功能是需要解析日誌,然後根據解析日誌的信息再針對相應接口發送請求,對比日誌分子中結果和請求後的結果,就是在對比的過程中遇到了問題,這個問題困擾了我兩天,所以在此記錄一下:

1- 首先說一下問題的原因:

日誌分析出來後有一部分響應中是包含中文的,但是中文被編碼了,格式如下:{"message":"\xE6\x88\x90\xE5\x8A\x9F"}

這只是響應體中的一部分,那麼問題來了,就是在將這部分編碼過的數據轉成正常的中文的時候無論如何也轉不過去,我是使用的python3,開發使用的windows系統,在開發的時候使用:"\xE6\x88\x90\xE5\x8A\x9F".encode("raw_unicode_escape").decode()是可以正常將此編碼轉成中文的:

"\xE6\x88\x90\xE5\x8A\x9F".encode("raw_unicode_escape")這一步會將"\xE6\x88\x90\xE5\x8A\x9F"轉換爲b"\xE6\x88\x90\xE5\x8A\x9F",然後調用decode()方法正常轉碼爲中文,沒有問題,但是放在服務器上的時候,"\xE6\x88\x90\xE5\x8A\x9F".encode("raw_unicode_escape")將"\xE6\x88\x90\xE5\x8A\x9F"轉換爲b"\\xE6\\x88\\x90\\xE5\\x8A\\x9F",這個時候再調用decode的時候,轉碼錯誤,後來經過查閱資料,又不斷的嘗試各種方法,終於找到了一種可行的方式,就是先將"\xE6\x88\x90\xE5\x8A\x9F"中的"\x"替換爲"%",那麼要編碼的字符就被替換成了"%E6%88%90%E5%8A%9F",然後再使用urllib.parse.unquote("%E6%88%90%E5%8A%9F")方法就可以成功了,還有兩個小問題是使用json.loads的時候被轉換的字符中不能包含"\",使用eval方法轉換時被編碼的字符中不能包含false,true,null等,否則會報錯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章