打印到控制台的JSON显示错误的编码

时间:2016-09-28 19:01:31

标签: python json python-3.x utf-8 cyrillic

我正在尝试从某些JSON文件中读取西里尔字符,然后使用在Windows上的Python 3.4.3 将其输出到控制台。普通打印('Russiansmthбуквы')按预期工作。

但是当我打印JSON内容时,它似乎在Windows-1251中打印 - “СЂСѓСЃСЃРєРёРμР±СѓРєРІС<”(虽然我的控制台,我的JSON文件和我的.py(带编码注释)都是UTF-8)。 / p>

我尝试将其重新编码为Win-1251并将控制台设置为Win-1251,但仍然没有运气。

我的JSON(以UTF-8编码):

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

我加载字典的代码:

def load_dictionary():
global Dictionary, isFatal
try:
    with open(DictionaryName) as f:
        Dictionary = json.load(f)
except Exception as e:
    logging.critical('Error loading dictionary: ' + str(e))
    isFatal = True
    return
logging.info('Dictionary was loaded successfully')

我试图以两种方式输出它(两者都显示相同的乱码):

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

一个有趣的附加组件:我已将整个俄语字母添加到我的JSON文件中,似乎卡在“Сс”字母(错误加载字典:'charmap'编解码器无法解码位置X中的字节0x81:字符映射到)。如果我删除这一个字母,它没有显示异常,但上面的问题仍然存在。

1 个答案:

答案 0 :(得分:0)

但是当我打印JSON内容......

如果您使用public boolean isDAGBasedVcs() {return true;} 命令进行打印,那么您会在type范围内获得mojibake СЂСѓСЃСЃРєРёРµ …而不是русские …

CHCP 65001 (i.e. UTF-8)范围内尝试CHCP 1251

关注nauer's advice,使用type

示例(使用open(DictionaryName, encoding="utf8")编码保存39755662.json):

UTF-8