Android 用Python编码/解码Unicode URL

Android 用Python编码/解码Unicode URL,android,python,google-app-engine,unicode,Android,Python,Google App Engine,Unicode,我有一个Android应用程序,它使用 URLEncoder.encode(S.getSongArtist(),"UTF-8") 对发布到AppEngine python(2.7)web服务的unicode字符串进行编码。关于我使用的服务 urllib.unquote_plus(artist) 这并没有给我正确的结果。我有这样一个输入: Marie+Lafor%C3%AAt 这是不可能的 Marie Laforêt 如果我使用javascript url解码,例如: 我明白了 正确的结

我有一个Android应用程序,它使用

URLEncoder.encode(S.getSongArtist(),"UTF-8")
对发布到AppEngine python(2.7)web服务的unicode字符串进行编码。关于我使用的服务

urllib.unquote_plus(artist)
这并没有给我正确的结果。我有这样一个输入:

Marie+Lafor%C3%AAt
这是不可能的

Marie Laforêt
如果我使用javascript url解码,例如: 我明白了

正确的结果

我试着用

urllib.unquote(artist).decode('utf-8') 
但这会产生一个例外。如有任何提示,我们将不胜感激

编辑


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


你要解码的东西已经解码了。试试这个:

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

我猜您是在urllib.unquote()之前解码的:

如果您在解压缩后解码,结果将是您想要的:

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

只需确保没有将unicode传递给urllib.unquote\u plus。

我猜您是在urllib.unquote()之前解码的:

如果您在解压缩后解码,结果将是您想要的:

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

只需确保您没有将unicode传递给urllib。unquote_plus。

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


您试图解码的内容已被解码。试试这个:

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

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


您试图解码的内容已被解码。试试这个:

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

在最后一个
urllib.unquote(artist.decode('utf-8')
中,您会遇到什么异常情况?它似乎在python2.7.5下正常工作,如果我在最后使用decode,我得到:UnicodeEncodeError:“ascii”编解码器无法对位置11-12的字符进行编码:序号不在范围内(128)您尝试解码的内容已经解码。试试这个:
urllib.unquote_plus(artist.encode('utf-8')).decode('utf-8')
我在python shell中试过这个方法(就像Taxellool做的那样),效果是:>>>在服务器上打印urllib.unquote_plus(artist.decode('utf-8')Marie Laforêt这行代码生成exception@Taxellool:它应该是
urllib.unquote\u plus(artist.encode('ascii')).decode('utf-8')
您在最后一个
urlib.unquote(艺术家)中得到了什么异常。decode('utf-8')
?它似乎在python2.7.5下正常工作,如果我在最后使用decode,我得到:UnicodeEncodeError:“ascii”编解码器无法对位置11-12的字符进行编码:序号不在范围内(128)您尝试解码的内容已经解码。试试这个:
urllib.unquote_plus(artist.encode('utf-8')).decode('utf-8')
我在python shell中试过这个方法(就像Taxellool做的那样),效果是:>>>在服务器上打印urllib.unquote_plus(artist.decode('utf-8')Marie Laforêt这行代码生成exception@Taxellool:它应该是
urllib.unquote\u plus(artist.encode('ascii')).decode('utf-8')
在服务器上,这行代码生成一个异常:UnicodeEncodeError:'ascii'编解码器无法对位置11-12:序号不在范围(128)内的字符进行编码@scratchy:请参阅。我的答案也适用于Python 2。在服务器上,这行代码生成了一个异常:UnicodeEncodeError:“ascii”编解码器无法对位置11-12的字符进行编码:序号不在范围(128)内@scratchy:See。我的答案也适用于Python 2。