【问题标题】:What kind of URL encoding is this? [duplicate]这是什么类型的 URL 编码? [复制]
【发布时间】:2013-03-18 12:44:48
【问题描述】:

我有编码的网址

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 中转换?

【问题讨论】:

  • 我不明白这个问题发生了什么,似乎%E2%80%8B 只是随机插入到您的网址中。 - 这怎么发生的?你试图做什么来转换它?您是如何从 A->B 或 B->A 获得的?
  • 在 IE 中复制电子邮件并将其粘贴到 Chrome 或 FF 中时会发生这种情况。 :-/
  • 类似的问题和问题(%E2%80%8B)在这里stackoverflow.com/questions/6315422/encoding-issue-asp-net

标签: python


【解决方案1】:

编辑:(由于与@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 代表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 中添加似乎是一件奇怪的事情......

【讨论】:

  • 这将在字符串中留下零宽度空间(尽管使用print 时看不到它),这可能不是正确的解决方案,因为几乎可以肯定不应该使用 URL在单词中间有一个零宽度的空格。
  • 给定 URL,这就是它在 Python 中不被引用的方式。给定的 URL 是否正确不是 OP 的问题,也不是我们可以回答的问题,因为 URL 显然是虚构的。
  • 回答问题的一部分是弄清楚 OP 实际需要什么,因为他们可能并不完全了解自己。在这种情况下,取消引用 URL 显然不是它。
  • 那么你认为真正的问题是什么?
  • 按照OP的评论,问题可能是他的网络邮件客户端或浏览器添加了零宽度空间。如果无法在源中修复,则可能需要删除零宽度空间而不是取消引用。
猜你喜欢
  • 2017-03-16
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多