Unicode 字符串转字节 python 3

Unicode string to bytes python 3

我有一个 Unicode 字符串 my_string = 'SGtjPQ\u003d\u003d' 和字典(2 个反斜杠)

data = {'key': my_string}

我需要提供 json-以字节为单位的响应,所以我执行以下操作

response = json.dumps(data)
return response.encode()

最终得到了这个结果 b'{"key": "SGtjPQ\\u003d\\u003d"}'(4 个反斜杠)。但我希望响应中的 my_string 完全保持原样(带有 2 个反斜杠)。如何防止这种自动转义并获得结果 b'{"key": "SGtjPQ\u003d\u003d"}'

JSON 字符串中的反斜杠是转义字符,它本身需要转义。 "\" 在 JSON 中 表示 一个反斜杠。您得到的四个反斜杠是表示两个反斜杠的正确 JSON 语法。

如果您想要它有任何不同,您应该在 JSON 编码之前整理好您的字符串。不要写转义的 JSON 字面量语法,写下你想要的字符并让 JSON 为你正确编码。

我不确定您为什么决定在代码 u003d 前面的 python 字符串中放置两个反斜杠。使用数字代码指定 unicode 字符的语法仅使用一个斜杠。像这样:"SGtjPQ\u003d\u003d"

现在,回答您关于为什么在显示的字符串中出现 4 个斜杠的问题。这个inflation个反斜杠是正常的:

my_string 在内存中 -> 只有一个斜杠

使用 Python 字符串语法表示 my_string -> 两个反斜杠

my_string 在 json 中的表示 -> 两个反斜杠

my_string 的 json 表示(对字符串使用 Python 语法)-> 4 个反斜杠

所以最终结果中有 4 个反斜杠,因为斜杠首先被 JSON 编码转义,然后两个结果斜杠被 python 解释器的显示转义,它使用字符串的 Python 语法显示字符串。