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": "русский"
}
==>
我正在尝试从一些 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": "русский"
}
==>