エンコードされた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 には ZERO WIDTH SPACE が含まれていることに注意してください。
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を入れるのは変なようです...