在Python和Django中从JavaScript解码Unicode
在一个网站上,我通过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/
希望这对你有帮助!
另外,看看这个链接:
2
先把网址中的编码解码两次,然后再用UTF-8格式解码。