如何使用python url-safe编码字符串?和urllib.quote是错误的

时间:2011-06-14 02:27:09

标签: python encoding url-rewriting

您好我想知道您是否知道将字符串编码为url-safe的任何其他方法,因为urllib.quote做错了,输出与预期不同:

如果我尝试

  
    
      

urllib.quote( 'A')

    
  

我得到了

'%C3%A1'

但那不是正确的输出,应该是 %E1

正如此处提供的工具this site

所示

这不是我的困难,不正确的引用输出阻止浏览器找到资源,如果我尝试

  
    
      

urllib.quote('\ images \á\ some file.jpg')

    
  

然后我尝试使用我提到的javascript工具分别得到这个字符串

%5Cimages%5C%C3%A1%5Csome%20file.jpg

%5Cimages%5C%E1%5Csome%20file.jpg

注意几乎是一样的但是引用提供的url不起作用,而另一个则起作用。 我试着在提供引用的字符串上弄乱编码('utf-8),但它没有什么区别。 我尝试了其他带有重音的西班牙语单词,而且它们都有不同的表现形式。

这是一个python bug吗? 你知道一些能做到这一点的模块吗?

5 个答案:

答案 0 :(得分:7)

根据RFC 3986%C3%A1是正确的。在八位字节流进行百分比编码之前,应该使用UTF-8将字符转换为八位字节流。您链接的网站已过期。

有关处理URL中非ASCII字符的历史记录的详细信息,请参阅Why does the encoding's of a URL and the query string part differ?

答案 1 :(得分:3)

好的,明白了,我必须像这样编码到iso-8859-1

word = u'á'
word = word.encode('iso-8859-1')
print word

答案 2 :(得分:0)

默认情况下,Python以ASCII格式解释,因此即使您的文件编码方式不同,您的UTF-8字符也会以两个ASCII字符串联。

尝试将评论作为代码第二行的第一行,以匹配文件编码,您可能还需要使用u'á'

# coding: utf-8

答案 3 :(得分:0)

使用unicode字符串和char的数字表示(lord)怎么样?

>>> print '%{0:X}'.format(ord(u'á'))
%E1

答案 4 :(得分:0)

In this question似乎有些人写了一个非常大的函数来转换为ascii网址,这就是我需要的东西。但是我希望std lib中有一些编码工具可以用来完成工作。