Unicode字符串到字节python 3

时间:2015-07-30 15:35:32

标签: python json unicode encoding escaping

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

data = {'key': my_string}

我需要以字节为单位提供json-response,所以我做了以下

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

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

2 个答案:

答案 0 :(得分:1)

JSON字符串中的反斜杠是转义字符,本身需要进行转义。 JSON 中的"\\"表示单个反斜杠。你得到的四个反斜杠是用于表示两个反斜杠的正确JSON语法。

如果你想要它,你应该在JSON编码之前按顺序获取你的字符串。不要编写转义的JSON文字语法,写下你所说的字符,让JSON为你正确编码。

答案 1 :(得分:1)

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

现在,回答你关于为什么在显示的字符串中得到4个斜杠的问题。这种反斜杠数量的膨胀是正常的:

内存中的

my_string - >只有一个斜杠

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

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

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

因此,最终结果中有4个反斜杠,因为斜杠首先通过JSON编码进行转义,然后,两个生成的斜杠由python解释器的显示进行转义,python解释器使用字符串的Python语法显示字符串。