我需要使用GET请求通过JavaScript客户端将JSON发送到我的服务器,所以我开始回复回复以确保在翻译中没有丢失任何内容。普通文本似乎没有问题,但只要我包含任何类型的Unicode字符(例如“ç”),字符就会以某种方式编码(例如“\ u00e7”)并且返回值不同于请求值。我主要担心的是, A)在我的Python代码中保存了客户端正确发送到数据库的意图,并且 B)我将相同的值回显给客户端发送时(测试时)。
也许这意味着我无法使用base64,或者必须在此过程中做一些不同的事情。我很好。我的实施只是尝试达到目的。
我要发送到服务器的原始JSON字符串:
'{"weird-chars": "°ç"}'
通过GET参数传递给服务器的JavaScript Base64 encoded版本的字符串(在旁注上,编码字符串末尾的等号会导致任何问题吗?):
http://www.myserver.com/?json=eyJ3ZWlyZC1jaGFycyI6ICLCsMOnIn0=
Python str
来自param的b64decode
:
'{"weird-chars": "\xc2\xb0\xc3\xa7"}'
来自已解码参数dict
的Python json.loads
:
{'weird-chars': u'\xb0\xe7'}
来自str
的{{1}}的Python json.dumps
(以及后续输出到浏览器):
dict
答案 0 :(得分:3)
一切看起来都很好。
>>> hex(ord(u'°'))
'0xb0'
>>> hex(ord(u'ç'))
'0xe7'
也许你应该在尝试使用之前解码JSON。
答案 1 :(得分:3)
你的手术很好,你只需要再做一步;也就是说,从unicode编码为utf-8
(或支持'奇怪字符'的任何其他编码。)
将解码视为从常规字符串到 unicode和编码的操作,就像你要做的那样回复来自 unicode。换句话说:
你 de - 编码str
以生成unicode
字符串
和 en - 编写unicode
字符串以生成str
。
所以:
params = {'weird-chars': u'\xb0\xe7'}
encodedchars = params['weird-chars'].encode('utf-8')
encodedchars
将包含以所选编码显示的字符(在本例中为utf-8
)。