1. 程式人生 > >python讀取表中的json再重新寫入會出現中文變成unicode碼

python讀取表中的json再重新寫入會出現中文變成unicode碼

有一個表中的欄位 是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 字元進行轉義
	也是可以保證原來資料 讀取再寫入 不會變