在Python和Django中从JavaScript解码Unicode

1 投票
3 回答
1846 浏览
提问于 2025-04-16 07:56

在一个网站上,我通过POST请求发送了一个单词 pluș 到Django的视图中。这个单词被发送成了 plu%25C8%2599 的形式。所以我拿到这个字符串,想办法把 %25C8%2599 转换回 ș

我尝试用下面的方式解码这个字符串:

from urllib import unquote_plus
s = "plu%25C8%2599"
print unquote_plus(unquote_plus(s).decode('utf-8'))

我得到的结果是 pluÈ,这个结果的长度是5,而不是4。

我该如何才能把编码后的字符串 pluș 还原回来呢?

补充:

我最终是这样做到的:

def js_unquote(quoted):
  quoted = quoted.encode('utf-8')
  quoted = unquote_plus(unquote_plus(quoted)).decode('utf-8')
  return quoted

看起来有点奇怪,但确实达到了我想要的效果。

3 个回答

0
unquote_plus(s).encode('your_lang_encoding')

我试过这样做。我想通过HTML表单直接向一个包含像 "şğüöçı+" 这样的Unicode字符的Django网址发送一个JSON的POST请求,结果成功了。我在 encode() 函数中使用了 iso_8859-9 编码器。

1

你不能做到这一点,除非你知道编码是什么。Unicode本身并不是一种编码。你可以试试BeautifulSoup或者UnicodeDammit,这些工具可能会帮助你得到你想要的结果。

http://www.crummy.com/software/BeautifulSoup/

希望这对你有帮助!

另外,看看这个链接:

http://www.joelonsoftware.com/articles/Unicode.html

2

先把网址中的编码解码两次,然后再用UTF-8格式解码。

撰写回答