python3處理json文件中含有中文dumps的應用


python3的編碼問題一直比較簡單

內存中字符串采用unicode

存儲到文件中采用utf-8

以下為str,byte互相轉換的過程:

str = "abc學習"
str
Out[6]: 'abc學習'
mybyte = str.encode("utf-8")
mybyte
Out[8]: b'abc\xe5\xad\xa6\xe4\xb9\xa0'
str2 = mybyte.decode("utf-8")
str2
Out[10]: 'abc學習'

 

最近在寫json相關的文件存取,遇到這樣的問題:

import json
json_str = """{"a": " 1", "f": "100\n", "b": "好好學習"}"""
json_str
Out[20]: '{"a": " 1", "f": "100\n", "b": "好好學習"}'
json_str = json_str.encode('unicode_escape').decode('utf-8')
json_str
Out[22]: '{"a": " 1", "f": "100\\n", "b": "\\u597d\\u597d\\u5b66\\u4e60"}'
json_data = json.loads(json_str, encoding="utf-8")
json_data
Out[24]: {'a': ' 1', 'b': '好好學習', 'f': '100\n'}
dumps_str = json.dumps(json_data, indent=4)
dumps_str
Out[26]: '{\n    "f": "100\\n",\n    "a": " 1",\n    "b": "\\u597d\\u597d\\u5b66\\u4e60"\n}'
json_data = json.loads(dumps_str)
json_data
Out[28]: {'a': ' 1', 'b': '好好學習', 'f': '100\n'}

從上面的事例看出,通過string轉成json后,再通過json.dumps轉成字符串后,原先的好好學習變成了中文編碼,存儲到文件中也是中文編碼,很不直觀。

經過摸索,采用如下方法即可使得dumps轉成中文(ensure_ascii=False)

dumps_str = json.dumps(json_data, ensure_ascii=False, indent=4)
dumps_str
Out[30]: '{\n    "f": "100\\n",\n    "a": " 1",\n    "b": "好好學習"\n}'


免責聲明!

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



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