Эквивалентный urllib.parse.unquote() в Python 2.7

Я импортирую urlparse вместо urllib.parse в python 2.7, но получаю AttributeError: у объекта 'function' нет атрибута 'unquote'

File "./URLDefenseDecode2.py", line 40, in decodev2
    htmlencodedurl = urlparse.unquote(urlencodedurl)

Что эквивалентно urllib.parse.unquote() в python 2.7?

1 ответ

Решение

В Python 2.7 unquote находится непосредственно в urllib: urllib.unquote (string)

Семантика Python 3 urllib.parse.unquote не то же самое, что Python 2 urllib.unqote, особенно при работе со строками, отличными от ASCII.

Следующий код должен позволить вам всегда использовать новую семантику Python 3, и в конечном итоге вы можете просто удалить ее, когда вам больше не нужно поддерживать Python 2.

try:
    from urllib.parse import unquote
except ImportError:
    from urllib import unquote as stdlib_unquote

    # polyfill. This behaves the same as urllib.parse.unquote on Python 3
    def unquote(string, encoding='utf-8', errors='replace'):
        if isinstance(string, bytes):
            raise TypeError("a bytes-like object is required, not '{}'".format(type(string)))

        return stdlib_unquote(string.encode(encoding)).decode(encoding, errors=errors)
Другие вопросы по тегам