您好我想知道您是否知道将字符串编码为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吗? 你知道一些能做到这一点的模块吗?
答案 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中有一些编码工具可以用来完成工作。