我来自这个old discussion ,但解决方案并没有太大帮助,因为我的原始数据编码不同:
我的原始数据已经用 unicode 编码,我需要输出为 UTF-8
data={"content":u"\u4f60\u597d"}
当我尝试转换为 utf 时:
json.dumps(data, indent=1, ensure_ascii=False).encode("utf8")
我得到的输出是
"content": "ä½ å¥½"
预期的输出应该是
"content": "你好"
我在没有 ensure_ascii=false
的情况下尝试过,输出变成了普通的未转义 "content": "\u4f60\u597d"
如何将之前的\u 转义 json 转换为 UTF-8?
最佳答案
您拥有 UTF-8 JSON 数据:
>>> import json
>>> data = {'content': u'\u4f60\u597d'}
>>> json.dumps(data, indent=1, ensure_ascii=False)
u'{\n "content": "\u4f60\u597d"\n}'
>>> json.dumps(data, indent=1, ensure_ascii=False).encode('utf8')
'{\n "content": "\xe4\xbd\xa0\xe5\xa5\xbd"\n}'
>>> print json.dumps(data, indent=1, ensure_ascii=False).encode('utf8')
{
"content": "你好"
}
我的终端碰巧配置为处理 UTF-8,因此将 UTF-8 字节打印到我的终端会产生所需的输出。
但是,如果您的终端未设置为此类输出,则您的终端会显示“错误”字符:
>>> print json.dumps(data, indent=1, ensure_ascii=False).encode('utf8').decode('latin1')
{
"content": "ä½ å¥½"
}
注意我是如何将数据解码为 Latin-1 以故意误读 UTF-8 字节的。
这不是 Python 问题;这是一个问题,与您在用于读取这些字节的任何工具中处理 UTF-8 字节的方式有关。
关于python - json.dumps\u 将 unicode 转义为 utf8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38620471/