如何将unicode转义序列URL转换为python unicode?

时间:2010-12-22 19:47:05

标签: javascript python unicode escaping

如果URL中包含一些unicode字符,并且使用javascript(escape(text))在客户端进行转义,那么正确的方法是什么?例如,如果我的网址是:domain.com/?text=%u05D0%u05D9%u05DA%20%u05DE%u05DE%u05D9%u05E8%u05D9%u05DD%20%u05D0%u05EA%20%u05D4%u05D8%u05E7% u05E1%u05D8%20%u05D4%u05D6%u05D4

我试过了: text = urllib.unquote(request.GET.get('text')) 但我收到了完全相同的字符串(%u05D0%u05D9%u05DA%20%u05DE ...)

2 个答案:

答案 0 :(得分:3)

最终我做的是将客户端从escape(text)更改为urlEncodeComponent(text) 然后在python方面使用:

request.encoding ='UTF-8' text = unicode(request.GET.get('text',None))

不确定这是最好的做法,但它适用于英语和希伯来语

答案 1 :(得分:0)

因为你的%uxxxx不是Python标准,即\ uxxxx,你需要一个棘手的转换,用'\'替换'%',如下所示(在我的Python shell中测试):

>>> import sys; reload(sys); sys.setdefaultencoding('utf8')
<module 'sys' (built-in)>
>>> text = '%u05D0%u05D9%u05DA%20%u05DE%u05DE%u05D9%u05E8%u05D9%u05DD%20%u05D0%u05EA%20%u05D4%u05D8%u05E7%u05E1%u05D8%20%u05D4%u05D6%u05D4'
>>> text = text.replace('%', '\\')
>>> text_u = text.decode('unicode-escape')
>>> print text_u
איךממיריםאתהטקסטהזה

转换为Unicode类型后,您可以将其转换为您喜欢的任何编码,如下所示:

>>> text_utf8 = text_u.encode('utf8')
>>> text_utf8
'\xd7\x90\xd7\x99\xd7\x9a\x10\xd7\x9e\xd7\x9e\xd7\x99\xd7\xa8\xd7\x99\xd7\x9d\x10\xd7\x90\xd7\xaa\x10\xd7\x94\xd7\x98\xd7\xa7\xd7\xa1\xd7\x98\x10\xd7\x94\xd7\x96\xd7\x94'
>>> print text_utf8
איךממיריםאתהטקסטהזה