在python中打印unicode字符

时间:2019-04-19 13:54:26

标签: python-3.x

我正在设置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"}

2 个答案:

答案 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进行转义。