0

我有编码的 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 中进行转换?

4

1 回答 1

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'

通常,引用的 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/s​tart/DEE-G​6F-W4A-2N1​5

以下是您如何判断%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 似乎是一件奇怪的事情......

于 2013-03-18T12:48:51.657 回答