编辑:错误不会出现在提示中,而是出现在以下Google App Engine环境中。 我跟随json
>>>dat = r"""{"name":"Something", "data":"For youth \n\nBe a hero! Donate blood!\n\u091c\u092f \u0939\u093f\u0902\u0926! \u0935\u0928\u094d\u0926\u0947 \u092e\u093e\u0924\u0930\u092e\u094d"}"""
它包含unicode转义字符。 我想解析这个。所以我做了
>>>jsDat = json.loads(js)
然后是作品
>>>name = jsDat.get('name')
>>>name = name.encode('ascii') #This is because json module handles in unicode
>>>print name
Something
但是尝试使用unicode数据的字段,即“数据”,会显示错误
>>>data = jsDat.get('data')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 366-367: ordinal not in range(128)
我应该如何解析数据?
答案 0 :(得分:1)
如果字符超过ASCII字符集,则无法将unicode编码为ASCII。如果要强制转换并丢失数据,可以执行以下操作:
data = jsDat.get('data')
data = data.encode('ascii', 'ignore')
有关忽略的详细信息,请参阅str.encode的文档。
顺便说一句,我不确定你为什么要尝试编码为ASCII - JSON模块似乎处理那个原始字符串就好了?
答案 1 :(得分:1)
错误来自您的“打印”行,并且只是因为您尝试打印到不了解编码的“终端”。使用JSON对象执行任何其他操作不应产生错误。