首先抱歉我的英语
我必须从json文件转换字符串,如下所示:
Collage
类似:
{"detalle":"el Expediente N\u00b0\u00a030 de la Resoluci\u00f3n 11..."}
然后将其写为txt。
我尝试过:
{"detalle":"el Expediente N° 30 de la Resolución 11..."}
返回
json.dumps({"detalle":"el Expediente N\u00b0\u00a030 de la Resoluci\u00f3n 11..."}, ensure_ascii=False).encode('utf8')
如何转换?
答案 0 :(得分:1)
(在这个答案中,我假设您使用的是Python 2。)
首先,让我解释一下为什么您的代码段返回的内容与您预期的不同:
r1 = json.dumps({"detalle":"el Expediente N\u00b0\u00a030 de la Resoluci\u00f3n 11..."}, ensure_ascii=False).encode('utf8')
print(r1)
r2 = json.dumps({"detalle":u"el Expediente N\u00b0\u00a030 de la Resoluci\u00f3n 11..."}, ensure_ascii=False).encode('utf8')
print(r2)
这将输出:
{"detalle": "el Expediente N\\u00b0\\u00a030 de la Resoluci\\u00f3n 11..."}
{"detalle": "el Expediente N° 30 de la Resolución 11..."}
区别在于,在第一种情况下,输入字符串是ascii代码,带有斜杠和其他表示特殊字符的字符,在第二种情况下,字符串是具有unicode字符的unicode字符串。第二种情况是您想要的。
基于此,我将从您的问题中了解到以下信息:
通常,当您使用json
模块读取JSON文件时,解析器将不对字符串(在JSON文件中转义的字符串)进行转义。如果仍然看到转义的字符,则表明字符串在JSON文件中(意外地?)被两次转义了。在这种情况下,请尝试使用s.decode('unicode-escape')
进行额外的转义:
data["detalle"] = data["detalle"].decode('unicode-escape')
一旦在Python中加载了正确的unicode字符串,用s.encode('utf8')
将它们转换为字节并将结果写入文件,就是正确的。