Python: как проверить, является ли строка допустимым IRI? - программирование
Подтвердить что ты не робот

Python: как проверить, является ли строка допустимым IRI?

Существует ли стандартная функция для проверки IRI, чтобы проверить URL, по-видимому, я могу использовать:

parts = urlparse.urlsplit(url)  
    if not parts.scheme or not parts.netloc:  
        '''apparently not an url'''

Я попробовал это с URL, содержащим символы Unicode:

import urlparse
url = "http://fdasdf.fdsfîășîs.fss/ăîăî"
parts = urlparse.urlsplit(url)
if not parts.scheme or not parts.netloc:  
    print "not an url"
else:
    print "yes an url"

и я получаю yes an url. Означает ли это, что я хороший тест для действительного IRI? Есть ли другой способ?

4b9b3361

Ответ 1

Использование urlparse недостаточно для проверки допустимого IRI.

Используйте rfc3987 package вместо:

from rfc3987 import parse

parse('http://fdasdf.fdsfîășîs.fss/ăîăî', rule='IRI')

Ответ 2

Единственный чувствительный к символам код в реализации urlparse требует, чтобы схема содержала только буквы ASCII, цифры и [ + -.] символов; в противном случае он полностью агностик, поэтому будет отлично работать с символами, отличными от ASCII.

Поскольку это не документированное поведение, вы несете ответственность за проверку того, что это будет продолжаться (с тестами в вашем проекте), но я не думаю, что это было бы изменено для прерывания IRI.

urllib предоставляет функции цитирования для преобразования IRI в/из URI URI, хотя они до сих пор не упоминают IRI явно в документации и они нарушаются в некоторых случаях: Есть ли готовый под Unicode-заменитель, который я могу использовать для urllib.quote и urllib.unquote в Python 2.6.5?