如何从URL参数中获取Unicode字符?
我需要通过JavaScript客户端使用GET请求把JSON发送到我的服务器,所以我开始回显响应,以确保在传输过程中没有丢失任何信息。普通文本似乎没有问题,但一旦我加入任何Unicode字符(比如“ç”),这个字符就会以某种方式被编码(例如变成“\u00e7”),返回的值和请求的值就不一样了。我最关心的是,A) 我在Python代码中能正确保存客户端想要发送到数据库的内容,以及B) 在测试时能把发送的相同值回显给客户端。
这可能意味着我不能使用base64,或者在过程中需要做一些不同的处理。我对此没问题。我的实现只是为了达到目的的一种尝试。
当前步骤(如果需要,可以更改任何步骤):
我想发送到服务器的原始JSON字符串:
'{"weird-chars": "°ç"}'
通过GET参数发送到服务器的JavaScript 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"}'
2 个回答
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
)。
3
在我看来,一切都没问题。
>>> hex(ord(u'°'))
'0xb0'
>>> hex(ord(u'ç'))
'0xe7'
也许你应该先把JSON解码,再去使用它。