簡體   English   中英

打印到控制台的JSON顯示錯誤的編碼

[英]JSON printed to console shows wrong encoding

我試圖從一些JSON文件中讀取西里爾字符,然后在Windows上使用Python 3.4.3將其輸出到控制台。 普通打印('Russiansmthбуквы')按預期工作。

但是當我打印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范圍。

嘗試在CHCP 65001 (即UTF-8范圍內type

按照nauer的建議 ,使用open(DictionaryName, encoding="utf8")

示例39755662.jsonUTF-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": "русский"
}

==>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM