2012-12-13 77 views
2

现在我正在维基百科上工作。在很多文章中,我注意到一些URL,例如,https://www.google.com/search?q=%26%E0%B8%89%E0%B8%B1%E0%B8%99,很长。该示例网址可以替换为“https://www.google.com/search?q=%26ฉัน”(ฉัน是泰语),它更短,更干净。但是,当我使用urllib.unquote函数来解码URL时,它甚至会解码%26,并因此得到“https://www.google.com/search?q= &ฉัน”。正如你可能已经注意到的,这个URL是无用的;它没有形成有效的链接。只解码网址非ASCII字符

因此,我想知道如何获得解码链接,而它是有效的。我认为只解码非ASCII字符会得到有效的URL。这是对的吗?以及如何做到这一点?

谢谢:)

回答

1
,你可以用一些占位代替%80(%00-%7F)下的所有URL编码序列,做一个URL解码,并取代原来的URL编码序列回

最简单的方法占位符。

另一种方法是查找UTF-8序列。您的网址似乎以UTF-8编码,维基百科使用UTF-8。您可以看到如何编码UTF-8字符的Wikipedia entry for UTF-8

所以,在网址编码时,每个有效的非ASCII UTF-8字符将遵循这些模式中的一种:(%80-%BF)

  • (%C0-%DF)
  • (%80-%BF)(%80-%BF)(%80-%BF)
  • (%F0-%F7)(%80-%BF) BF%)(%80-%BF)(%80-%BF)
  • (%FC-%FD) (%80-%BF)(%80-%BF)(%80-%BF)(%80-%BF)(%80-%BF)

因此,您可以在URL中匹配这些模式并单独取消每个字符的引号。


但是请记住,并非所有的URL都以UTF-8编码。

在一些旧网站中,他们仍然使用其他字符集,例如Windows-874用于泰语。

在这种情况下,该特定网站的“ฉัน”被编码为“%A9%D1%B9”而不是“%E0%B8%89%E0%B8%B1%E0%B8%99”。如果你使用urllib.unquote来解码,你会得到一些乱码文本,比如“?ѹ”而不是“ฉัน”,这可能会破坏链接。

所以你必须要小心,并检查URL解码是否破坏链接。确保你正在解码的URL是UTF-8。