我有编码的网址
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中进行转换?
答案 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/start/DEE-G6F-W4A-2N15
以下是%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'
放入网址似乎很奇怪......