python讀取表中的json再重新寫入會出現中文變成unicode碼
阿新 • • 發佈:2018-12-18
有一個表中的欄位 是gbk格式,比如該欄位是comment:這是人和公園的西門 然後 將該欄位 要插入另一個表(utf8)中的某個欄位:該欄位是個json, 往該json中添 加一個新的欄位comment。 操作步驟:讀取json,新增comment欄位,json.dumps(data),寫入表中。 發現表中是unicode編碼, 且所有中文都變成字串形式 u8fd9u662fu4ebau548cu516cu56edu7684u897fu95e8, 解決方法,在json中存在中文字元時,重新json.dump時候一定要加入ensure_ascii=False選項 ,才可以,不會進行ascii的編碼,要不然,寫入表中的為unicode的字串, (想要恢復的話,需要讀取出來,將u換成\u , 然後json.dump加上ensure_ascii=False,寫入表中即可)
幾種方法測試排查
1 將gbk 解碼 成 unicode 裝進json 在dumps utf-8 資料庫表 顯示:u8fd9u662fu4ebau548cu516cu56edu7684u897fu95e8 2 將gbk 解碼 成 unicode 裝進json 再dumps 再.decode('unicode_escape') utf-8 資料庫表 顯示:這是人和公園的西門 3 將gbk 解碼 成 unicode 再編碼成utf-8 裝進json 在dumps utf-8 資料庫表 顯示:u8fd9u662fu4ebau548cu516cu56edu7684u897fu95e8 4 將gbk 解碼 成 unicode 再編碼成utf-8 裝進json 在dumps 再.decode('unicode_escape') utf-8 資料庫表 顯示:這是人和公園的西門 5 將gbk 不解碼 裝進json 在dumps 報錯 6 將gbk 解碼 成 unicode 裝進json 在dumps 或者 將gbk 解碼 成 unicode 再編碼成utf-8 裝進json 在dumps 加上ensure_ascii=False 表中可以正常顯示漢子 json.dumps(comment_json,ensure_ascii=False)
從原表中讀取json 在原封不動的寫入json
7 從表中 先json.loads 在json.dumps json.dumps(comment_json)
則 表中原來中文 現在顯示u8fd9u662fu4ebau548cu516cu56edu7684u897fu95e8
8 從表中 先json.loads 在json.dumps json.dumps(comment_json,ensure_ascii=False)
則表中可以正常 原封不動的顯示 原來的資料 包括漢子正常顯示
原因: 因為原來的json中含有中文,在json.dumps時候預設啟動的是ascii字元, 存進表中的是unicode字元而不是漢子 所以json含有中文的時候應該使用ensure_ascii=False選項 同理: 我們也可以不用開啟ensure_ascii=False選項 可以使用json.dumps(comment_json).decode('unicode_escape') 對unicode 字元進行轉義 也是可以保證原來資料 讀取再寫入 不會變