我需要使用GET请求通过JavaScript客户端将JSON发送到我的服务器,因此我开始回显响应以确保在传输过程中没有丢失任何内容。正常文本似乎没有问题,但是一旦包含任何Unicode字符(例如“ç”),该字符就会被编码(例如“\u00e7”),并且返回值与请求值不同。我的主要关注点是:A) 在我的Python代码中正确保存客户端打算发送到数据库的内容,以及B) 当进行测试时,我回显了发送的相同值给客户端。
也许这意味着我不能使用base64,或者必须在途中做一些不同的事情。我可以接受这个。我的实现只是为达到目的而尝试的手段。
当前步骤(如果需要,可以更改任何步骤):
我想要发送到服务器的原始JSON字符串:
'{"weird-chars": "°ç"}'
JavaScript中将字符串通过GET参数传递给服务器的Base64编码版本(另外,编码后字符串末尾的等号会引起任何问题吗?):
http://www.myserver.com/?json=eyJ3ZWlyZC1jaGFycyI6ICLCsMOnIn0=
参数进行b64decode
后,Python中的str
结果:
'{"weird-chars": "\xc2\xb0\xc3\xa7"}'
从解码参数的json.loads
创建Python dict
:
{'weird-chars': u'\xb0\xe7'}
以下是从 dict
转换成 json.dumps
的 Python str
(并输出到浏览器):
'{"weird-chars": "\u00b0\u00e7"}'
loads
仍然是\xb0\xe7
十六进制编码,它如何为我提供“解码”值? 我只是想理解。°
是否应存储为数据库中的xb0
等,因此您认为它已被“解码”? 或者,您建议在运行loads
之前以其他方式“解码”它? 在上面的示例中,我已经使用了loads
,在倒数第二步中。 浏览器仍然从最后一步接收字符串,这是不正确的。 - orokusakirepr()
显示的相同的东西?我是否错过了最后一步? - orokusakijson.dumps(my_dict)
替换为json.dumps(my_dict, ensure_ascii=False)
,则可以在不编码Unicode字符的情况下工作。那样做会有问题吗? - orokusakiJSON.decode()
方法都会执行适当的转换。 - orokusaki