2014-06-13 47 views
0

我們發現的json.dumps在Linux和Windows神祕的字符串編碼3

jsonData = json.load(open('test.json')) 
print(jsonData) 

jsonStr = json.dumps(jsonData, ensure_ascii=False) 
print(jsonStr) 

輸出在Linux上不同的行爲:(python3.3)

{'name': 'Müller'} 
{"name": "Müller"} 

輸出在Windows上:(python3.4)

{'name': 'Müller'} 
{"name": "M\xc3\xbcller"} 

我們錯過了什麼嗎? test.json看起來像{'name': 'Müller'}

在Windows上如何用Python 3讀取UTF-8文件?

+0

你用什麼編碼*在Windows上寫*文件? –

+0

當然,我無法在Mac 3.4上重現您的問題,生成的輸出看起來像UTF-8數據被解釋爲Latin-1。你是否100%確定JSON數據不是從文件中讀取的? –

+0

對不起,我試了很多,並把錯誤的代碼。 –

回答

2

打開文件時不要依賴默認編碼;您的JSON文件被編碼成UTF-8,但您使用的是單字節編碼解碼器打開它,而不是(可能是CP1252,在Windows Latin-1的代碼頁):

jsonData = json.load(open('test.json', encoding='utf8')) 

open() function documentation

默認的編碼是平臺相關(無論locale.getpreferredencoding()回報)

重點煤礦。

+0

非常感謝!那是缺失的部分。 –