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

时间:2010-12-17 20:17:04

标签: python unicode encoding character-encoding special-characters

我需要使用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

2 个答案:

答案 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)。