我正在设置python API,以使用Java来填充android应用。输出API是JSON。我尝试产生一个纯Unicode字符串。我想从字面上产生没有任何双反斜杠的Unicode字符串。
这就是我想要产生的:
\u003chead\u003e
我尝试解码,但导致双反斜杠。
b'\u003chead\u003e'.decode('utf-8')
result
\\\\u003chead\\\\u003e
虽然我要的是
\u003chead\u003e
以JSON打印或导出。我正在使用python 3.6
完整代码
import json
abc = {"me": b"\u003chead\u003e".decode('utf-8')}
json.dumps(abc)
结果
{"me": "\\u003chead\\u003e"}
我想要
{"me": "\u003chead\u003e"}
答案 0 :(得分:0)
查看此thread表明,将数据转储为JSON格式应该从技术上会产生未转义的unicode格式,因此我不确定您正在执行的操作会导致与预期结果不同?
答案 1 :(得分:0)
据我所知,您不需要做很多事情。
您的开始字符串,
b"\u003chead\u003e'"
已经是您想要的。除此以外,它不是更大的JSON字符串的一部分。而且没有JSON库会满足您的需要:实际的Unicode字符\ u003c是'<',并且将仅在JSON中写入'<',并且如果您尝试将字符'\','u',' 0','0','3','c'转换为JSON,则当然需要转义反斜杠。因此,您不能使用JSON库。
我看到的唯一解决方案是在数据中使用一些占位符,然后进行JSON转储,然后将字符串替换为所需的字符串:
s = b"\u003chead\u003e'"
js = json.dumps({"me": "PLACEHOLDER"}).encode('utf8')
yourtext = js.replace(b"PLACEHOLDER", s)
现在yourtext
包含您想要的内容。当然,如果PLACEHOLDER
已经在其他地方发生,则此操作将失败,因此请谨慎选择该字符串。
所有这些完全不必要,因为这些字符根本不需要\ u进行转义。