使用Python进行Unicode URL编码/解码

2 投票
2 回答
3821 浏览
提问于 2025-04-17 22:46

我有一个安卓应用,它使用

URLEncoder.encode(S.getSongArtist(),"UTF-8")

来编码一个unicode字符串,然后把这个字符串发送到一个AppEngine的python (2.7)网络服务。在这个服务上,我使用

urllib.unquote_plus(artist)

但是这样做没有得到正确的结果。我有一个输入是这样的:

Marie+Lafor%C3%AAt

解码后变成了

Marie Laforêt

如果我用javascript的url解码,比如说这个链接:http://meyerweb.com/eric/tools/dencoder/,我得到的结果是

Marie Laforêt

这是正确的结果。

我尝试使用

urllib.unquote(artist).decode('utf-8') 

但是这会产生一个异常。任何提示都非常感谢。

编辑

Taxellool在评论中给出了正确的答案:

你试图解码的内容其实已经解码过了。试试这个:

urllib.unquote_plus(artist.encode('utf-8')).decode('utf-8')

2 个回答

1

我想你是在使用 urllib.unquote() 之前就进行了解码:

>>> print urllib.unquote_plus('Marie+Lafor%C3%AAt'.decode('utf-8'))  
Marie Laforêt

如果你在 unquote 之后再解码,结果就会是你想要的:

>>> print urllib.unquote_plus('Marie+Lafor%C3%AAt').decode('utf-8')  
Marie Laforêt

只要确保你不要把 unicode 传给 urllib.unquote_plus 就可以了。

3

Taxellool在评论中给出了正确的答案:

你想解码的内容其实已经解码过了。试试这个:

urllib.unquote_plus(artist.encode('utf-8')).decode('utf-8')

撰写回答