-1

编辑:错误不会出现在提示中,而是出现在以下 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)

我应该如何解析数据?

4

2 回答 2

1

如果字符超出 ASCII 字符集,则无法将 unicode 编码为 ASCII。如果要强制转换并丢失数据,可以执行以下操作:

data = jsDat.get('data')
data = data.encode('ascii', 'ignore')

有关忽略的更多详细信息,请参阅str.encode的文档。

顺便说一句,我不确定您为什么要尝试编码为 ASCII - JSON 模块似乎可以很好地处理该原始字符串?

于 2012-08-14T16:26:18.180 回答
1

该错误来自您的“打印”行,只是因为您尝试打印到不理解编码的“终端”。对 JSON 对象执行任何其他操作都不会产生错误。

于 2012-08-14T20:01:59.167 回答