2016-09-28 62 views
1

我想從一些JSON文件讀取西里爾文字符,然後將其輸出到控制檯使用Python 3.4.3在Windows。正常打印('Russian smthбуквы')按預期工作。 (但是我的控制檯,我的JSON文件和我的.py(帶有編碼註釋)都是UTF-8)。但是,當我打印JSON內容時,它似乎在Windows-1251中打印 - 「СёСѓСЃСЃРєРёРμР±СѓРєРІС<」。JSON打印到控制檯顯示錯誤編碼

我試過將它重新編碼爲Win-1251並將控制檯設置爲Win-1251,但仍然沒有運氣。

我的JSON(編碼UTF-8):

{ 
    "русские буквы": "что-то ещё на русском", 
    "english letters": "и что-то на великом" 
} 

我的代碼加載詞典:

​​

我試圖以兩種方式輸出它(這兩個節目相同的胡言亂語):

print(helper.Dictionary.get('rly')) 
print(helper.Dictionary) 

一個有趣的附加組件:我已經將整個俄文字母添加到了我的JSON文件中,並且似乎卡在「Сс」字母處。 (錯誤加載字典:'charmap'編解碼器無法解碼位置X中的字節0x81:字符映射到)。如果我刪除這一封信,它不會顯示任何異常,但上述問題仍然存在。

+0

我們看你是如何加載JSON,但如果和你怎麼輸出呢? – deceze

+0

添加了此信息,對不起。 @deceze –

+2

可能'open(DictionaryName,encoding =「utf8」)'幫助 – nauer

回答

0

但是當我打印JSON內容...

如果打印使用type命令它,那麼你得到mojibakeСЂСѓСЃСЃРєРёРµ …,而不是根據CHCP 1251範圍русские …

嘗試type根據CHCP 65001 (i.e. UTF-8)的範圍。

關注nauer's advice,使用open(DictionaryName, encoding="utf8")

39755662.json保存與UTF-8編碼):

==> chcp 866 
Active code page: 866 

==> type 39755662.json 
{ 
    "╤А╤Г╤Б╤Б╨║╨╕╨╡ ╨▒╤Г╨║╨▓╤Л": "╤З╤В╨╛-╤В╨╛ ╨╡╤Й╤С ╨╜╨░ ╤А╤Г╤Б╤Б╨║╨╛╨╝", 
    "rly": "╤А╤Г╤Б╤Б╨║╨╕╨╣" 
} 

==> chcp 1251 
Active code page: 1251 

==> type 39755662.json 
{ 
    "русские буквы": "что-то ещё на русском", 
    "rly": "СЂСѓСЃСЃРєРёР№" 
} 

==> chcp 65001 
Active code page: 65001 

==> type 39755662.json 
{ 
    "русские буквы": "что-то ещё на русском", 
    "rly": "русский" 
} 

==>