3

今、私はウィキペディアに取り組んでいます。多くの記事で、たとえばhttps://www.google.com/search?q=%26%E0%B8%89%E0%B8%B1%E0%B8%99などの URLが非常に長いことに気付きました。 . URL の例は、「https://www.google.com/search?q=%26ฉัน」 (ฉัน はタイ語) に置き換えることができます。しかし、urllib.unquote 関数を使って URL をデコードすると、%26 までデコードされ、結果として "https://www.google.com/search?q=&ฉัน" が得られます。お気づきかもしれませんが、この URL は役に立ちません。有効なリンクにはなりません。

したがって、有効な間にデコードリンクを取得する方法を知りたいです。非ASCII文字のみをデコードすると有効なURLが得られると思います。それが正しいか?そしてそれを行う方法は?

ありがとう :)

4

1 に答える 1

1

最も簡単な方法は、%80 (%00-%7F) 未満のすべての URL エンコード シーケンスを何らかのプレースホルダーに置き換え、URL デコードを実行し、元の URL エンコード シーケンスをプレースホルダーに戻すことです。

もう 1 つの方法は、UTF-8 シーケンスを探すことです。あなたの URL は UTF-8 でエンコードされているようで、ウィキペディアは UTF-8 を使用しています。UTF-8 文字のエンコード方法については、 Wikipedia の UTF-8 のエントリを参照してください。

そのため、URL でエンコードされた場合、有効な非 ASCII UTF-8 文字は次のいずれかのパターンに従います。

  • (%C0-%DF)(%80-%BF)
  • (%E0-%EF)(%80-%BF)(%80-%BF)
  • (%F0-%F7)(%80-%BF)(%80-%BF)(%80-%BF)
  • (%F8-%FB)(%80-%BF)(%80-%BF)(%80-%BF)(%80-%BF)
  • (%FC-%FD)(%80-%BF)(%80-%BF)(%80-%BF)(%80-%BF)(%80-%BF)

したがって、URL でこれらのパターンを照合し、各文字の引用符を個別に外すことができます。


ただし、すべての URL が UTF-8 でエンコードされているわけではないことに注意してください。

一部の古い Web サイトでは、タイ語用の Windows-874 など、他の文字セットをまだ使用しています。

このような場合、その特定の Web サイトの「ฉัน」は、「%E0%B8%89%E0%B8%B1%E0%B8%99」ではなく「%A9%D1%B9」としてエンコードされます。を使用してデコードするとurllib.unquote、「ฉัน」ではなく「?ѹ」のような文字化けしたテキストが表示され、リンクが壊れる可能性があります。

そのため、URL のデコードによってリンクが壊れていないか注意して確認する必要があります。デコードする URL が UTF-8 であることを確認してください。

于 2012-12-13T14:46:55.413 に答える