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

发布于 2024-10-09 11:27:36 字数 343 浏览 7 评论 0原文

如果 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

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

what is the right way to do it if the URL has some unicode chars in it, and is escaped in the client side using javascript ( escape(text) )? For example, if my url is: 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

I tried:
text = urllib.unquote(request.GET.get('text'))
but I got the exact same string back (%u05D0%u05D9%u05DA%20%u05DE ... )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

听你说爱我 2024-10-16 11:27:37

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

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

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

eventually what I did is changed the client side from escape(text) to urlEncodeComponent(text)
and then in the python side used:

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

Not sure this is the best thing to do, but it works in English and Hebrew

随梦而飞# 2024-10-16 11:27:37

因为你的 %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
איךממיריםאתהטקסטהזה

Because your %uxxxx is not Python-standard, which is \uxxxx, you need a tricky transform to replace '%' with '\', like following(tested in my 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
איךממיריםאתהטקסטהזה

After transformed into Unicode type, You can then transform it to whatever encoding you like, as following:

>>> 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
איךממיריםאתהטקסטהזה
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文