2016-02-14 83 views
1

所以我迷失在將unicode轉換爲utf-8的地方。我試圖定義一些包含unicode字符的JSON,並將它們寫入文件。打印到終端時,字符表示爲'\ u2606'。查看文件時,字符編碼爲'\ u2606',請注意雙反斜線。有人能指出我對這些編碼問題的正確方向嗎?Python編碼unicode <> utf-8

# encoding=utf8 

import json 

data = {"summary" : u"This is a unicode character: ☆"} 
print data 

decoded_data = unicode(data) 
print decoded_data 

with open('decoded_data.json', 'w') as outfile: 
    json.dump(decoded_data, outfile) 

我嘗試添加下面的代碼片段到我的文件頭,但是這並沒有成功都不是。

import sys 
import codecs 
sys.stdout = codecs.getwriter('utf8')(sys.stdout) 
sys.stderr = codecs.getwriter('utf8')(sys.stderr) 
+1

請你幫個忙,如果可能的話切換到Python 3 。在Python 2中,unicode和編碼數據的分離並不嚴格,這可能會隱藏編程錯誤。 – phobie

+0

@phobie:^ **不好的建議...... *永遠不要*試圖「隱藏」編程錯誤,因爲不應該有任何錯誤。 –

回答

1

首先要打印一本字典的表示,和python只使用ASCII字符轉義和其他字符與\uxxxx

json.dump一樣,試圖只使用ascii字符。您可以強制json.dump使用unicode有:

json_data = json.dumps(data, ensure_ascii=False) 
with open('decoded_data.json', 'w') as outfile: 
    outfile.write(json_data.encode('utf8'))