我有编码的 URL
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 中进行转换?
我有编码的 URL
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 中进行转换?
编辑:(由于与@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'
通常,引用的 URL 可以使用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
代表 a 的方法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']
请注意,未引用的 URL 包括零宽度空间:
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'
输入 URL 似乎是一件奇怪的事情......