如何从URL参数中获取Unicode字符?

3 投票
2 回答
8287 浏览
提问于 2025-04-16 08:41

我需要通过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'}

从这个 dictjson.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解码,再去使用它。

撰写回答