用python转换转义字符

时间:2019-01-19 16:10:49

标签: python json escaping

首先抱歉我的英语

我必须从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')

如何转换?

1 个答案:

答案 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')将它们转换为字节并将结果写入文件,就是正确的。