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

JSON printed to console shows wrong encoding

我正在尝试从一些 JSON 文件中读取西里尔字符,然后使用 Python 3.4.3 on Windows[=34= 将其输出到控制台].正常 print('Russian smth буквы') 按预期工作。

但是当我打印 JSON 内容时,它似乎打印在 Windows-1251 - "СЂСѓСЃСЃРєРёРµ Р±СѓРєРІС‹"(通过我的控制台,我的 JSON 文件和我的 . py(带有编码注释)采用 UTF-8 格式)。

我试过将其重新编码为 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:字符映射到 )。如果我把这一个字母去掉也没有异常,但是上面的问题依然存在

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

如果您使用 type 命令打印它,那么您会在 CHCP 1251 范围内得到 mojibake СЂСѓСЃСЃРєРёРµ … 而不是 русские …

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

关注,使用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": "русский"
}

==>