【问题标题】:How to decode json with non-ascii character?如何用非ASCII字符解码json?
【发布时间】:2015-12-27 08:12:47
【问题描述】:

我有一个包含非 ASCII 字符的 json 文件。我正在尝试检索一些具有非 ascii 字符的字段,但我遇到了关键错误。

我试过这个SO question,但没有帮助。我收到了UnicodeEncodeError 错误。

JSON 是:

{"Sh\u012bn\u1e0fan\u1e0f": "1","Shibirgh\u0101n": "2", "Khawr Fakk\u0101n": "3", "Sharjah": "4", "Ras al-Khaimah": "5", "Sang-e Ch\u0101rak": "6"}

我的代码:

my_dict.update({city.encode("utf-8"):id})
fobj = open("my.json",'a',0)        
json.dump(m_dict,fobj)
fobj.close()

读取 json:

with io.open('my.json',encoding='utf-8') as data_file:    
    data = json.loads(data_file.read())
    print data[u"Shibirghān".encode("utf-8")]

错误:

KeyError: 'Shibirgh\xc4\x81n

【问题讨论】:

  • 你不需要做编码/解码,使用unicode,让json模块处理。
  • 非常感谢。我删除了所有编码。现在可以使用了

标签: python json python-2.7


【解决方案1】:

我尝试重复你的错误,但似乎没有发生。

以下模拟代码:

#-*- coding: utf-8 -*-

import simplejson as json

#id_dict = {"Sh\u012bn\u1e0fan\u1e0f": "1","Shibirgh\u0101n": "2", "Khawr Fakk\u0101n": "3", "Sharjah": "4", "Ras al-Khaimah": "5", "Sang-e Ch\u0101rak": "6"}

id_dict = {}
encoded_city = u"Shibirghān".encode('utf-8')
id_dict.update({encoded_city: 1})

with open('my.json', 'wb') as fp:
    json.dump(id_dict, fp)

jsoned_id_dict = json.dumps(id_dict)
print 'jsoned_id_dict: ', jsoned_id_dict

with open('my.json', 'rb') as data_fp:
    data = json.load(data_fp)
    print 'result for key %s : %d ' % (u"Shibirghān", data[u"Shibirghān"])

结果是:

jsoned_id_dict:  {"Shibirgh\u0101n": 1}
result for key Shibirghān : 1

由于“Shibirghān”的 jsoned 结果与您的问题不同,我想这可能与其他原因有关,而不是 json 模块

如果有误会请告诉我~_~

【讨论】:

  • 这是因为我在加载 json 并使用编码密钥检索文件时使用的编码。我按照@thebjorn 的建议删除了编码,让 json 模块处理它。现在可以使用了。
猜你喜欢
  • 2012-09-16
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多