Ответ 1
Использование urlparse
недостаточно для проверки допустимого IRI.
Используйте rfc3987
package вместо:
from rfc3987 import parse
parse('http://fdasdf.fdsfîășîs.fss/ăîăî', rule='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? Есть ли другой способ?
Использование urlparse
недостаточно для проверки допустимого IRI.
Используйте rfc3987
package вместо:
from rfc3987 import parse
parse('http://fdasdf.fdsfîășîs.fss/ăîăî', rule='IRI')
Единственный чувствительный к символам код в реализации urlparse требует, чтобы схема содержала только буквы ASCII, цифры и [ + -.] символов; в противном случае он полностью агностик, поэтому будет отлично работать с символами, отличными от ASCII.
Поскольку это не документированное поведение, вы несете ответственность за проверку того, что это будет продолжаться (с тестами в вашем проекте), но я не думаю, что это было бы изменено для прерывания IRI.
urllib предоставляет функции цитирования для преобразования IRI в/из URI URI, хотя они до сих пор не упоминают IRI явно в документации и они нарушаются в некоторых случаях: Есть ли готовый под Unicode-заменитель, который я могу использовать для urllib.quote и urllib.unquote в Python 2.6.5?