2016-09-28 64 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": "русский" 
} 

==>