这是什么类型的URL编码?

时间:2013-03-18 12:44:48

标签: python

我有编码的网址

http://blahblah.com/s%E2%80%8Btart/DEE-G%E2%80%8B6F-W4A-2N1%E2%80%8B5

http://blahblah.com/start/DEE-G6F-W4A-2N15

这是什么类型的编码以及如何在Python中进行转换?

1 个答案:

答案 0 :(得分:3)

编辑:(由于与@interjay的对话):

%E2%80%8B代表ZERO WIDTH SPACE。那些可能不应该在那里。您可以使用str.replace删除它们:

In [135]: 'http://blahblah.com/s%E2%80%8Btart/DEE-G%E2%80%8B6F-W4A-2N1%E2%80%8B5'.replace('%E2%80%8B', '')
Out[135]: 'http://blahblah.com/start/DEE-G6F-W4A-2N15'

通常,引用的网址可以使用urllib.unquote取消引用:

In [6]: import urllib

In [7]: print(urllib.unquote('http://blahblah.com/s%E2%80%8Btart/DEE-G%E2%80%8B6F-W4A-2N1%E2%80%8B5'))
http://blahblah.com/s​tart/DEE-G​6F-W4A-2N1​5

以下是%E2%80%8B代表ZERO WIDTH SPACE

的方法
In [18]: x = urllib.unquote('%E2%80%8B')

In [19]: y = x.decode('utf-8')

In [20]: import unicodedata as UD

In [21]: [UD.name(c) for c in y]
Out[21]: ['ZERO WIDTH SPACE']

请注意,未取消的网址包含ZERO WIDTH SPACEs:

In [4]: urllib.unquote('http://blahblah.com/s%E2%80%8Btart/DEE-G%E2%80%8B6F-W4A-2N1%E2%80%8B5')
Out[4]: 'http://blahblah.com/s\xe2\x80\x8btart/DEE-G\xe2\x80\x8b6F-W4A-2N1\xe2\x80\x8b5'

放入网址似乎很奇怪......