我试图返回一个带有特殊字符的json对象。崩溃的线路是:
return json.dumps([x.toDict() for x in searches], ensure_ascii=False)
toDict函数:
def toDict(self):
"""Expect to dico. Needed before serialization in JSON"""
out = {}
if self.wkid is not None:
out['wkid'] = self.wkid
if self.wkt is not None:
out['wkt'] = self.wkt
return(out)
当我在for x in searches
:中打印x时
for x in searches:
print x.toDict()
{'crs': {'wkid': 4326, 'wkt': 'WGS84'}, 'candidates': [{'score': 200, 'type': 'ADR', 'location': {'y': 50.2485465358886, 'x': 4.38243469412172, 'crs': {'wkid': 4326, 'wkt': 'WGS84'}}, 'address': {'city': 'Fontenelle', 'munkey': '0585'}}, {'score': 200, 'type': 'ADR', 'location': {'y': 50.4123146893214, 'x': 4.32436581556278, 'crs': {'wkid': 4326, 'wkt': 'WGS84'}}, 'address': {'city': "Fontaine-l'\xe3\x89v\xe3\xaaque", 'munkey': '0324'}}, {'score': 200, 'type': 'ADR', 'location': {'y': 50.3217667573625, 'x': 4.21386030471998, 'crs': {'wkid': 4326, 'wkt': 'WGS84'}}, 'address': {'city': 'Fontaine-valmont', 'munkey': '0362'}}, {'score': 200, 'type': 'ADR', 'location': {'y': 49.7151404477129, 'x': 5.23438436377951, 'crs': {'wkid': 4326, 'wkt': 'WGS84'}}, 'address': {'city': 'Fontenoille', 'munkey': '0541'}}], 'id': u'1', 'address': {'city': u'Fontaine-lev', 'street': u'Avenue des Chones', 'zone': u'1301', 'house': u'19'}}
这很好用。然而,当我尝试时:
for x in searches:
print json.dumps(x.toDict(), ensure_ascii=False)
我得到的错误是:
UnicodeDecodeError('ascii', '"Fontaine-l\'\xe3\x89v\xe3\xaaque"', 12, 13, 'ordinal not in range(128)')
'ascii' codec can't decode byte 0xe3 in position 12: ordinal not in range(128).
奇怪的是,考虑到我传递ensure_ascii=False来指定不应解码文本。。
它仍在试图解码文本,这可能有什么错?
ensure_ascii=False
并不意味着它不会解码unicode文本。
如果ensure_ascii为false,则写入fp的一些块可能是unicode实例。这种情况通常是因为输入包含unicode字符串或使用了编码参数除非fp.write((明确理解unicode(如在codecs.getwriter((中(,否则这可能会导致错误
来自python文档