Use the standard-library json
module instead, and set the ensure_ascii
keyword parameter to False when encoding, or do the same with flask.json.dumps()
:
>>> data = u'u10e2u10d4u10e1u10e2'
>>> import json
>>> json.dumps(data)
'"\u10e2\u10d4\u10e1\u10e2"'
>>> json.dumps(data, ensure_ascii=False)
u'"u10e2u10d4u10e1u10e2"'
>>> print json.dumps(data, ensure_ascii=False)
"????"
>>> json.dumps(data, ensure_ascii=False).encode('utf8')
'"xe1x83xa2xe1x83x94xe1x83xa1xe1x83xa2"'
Note that you still need to explicitly encode the result to UTF8 because the dumps()
function returns a unicode
object in that case.
You can make this the default (and use jsonify()
again) by setting JSON_AS_ASCII
to False in your Flask app config.
WARNING: do not include untrusted data in JSON that is not ASCII-safe, and then interpolate into a HTML template or use in a JSONP API, as you can cause syntax errors or open a cross-site scripting vulnerability this way. That's because JSON is not a strict subset of Javascript, and when disabling ASCII-safe encoding the U+2028 and U+2029 separators will not be escaped to u2028
and u2029
sequences.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…