14

IRIをチェックするための標準関数はありますか?明らかに私が使用できる URL をチェックします:

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

Unicode 文字を含む URL で上記を試しました。

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 のテストに合格したことを意味しますか? 別の方法はありますか?

4

2 に答える 2

20

を使用するurlparseだけでは、有効な IRI をテストするには不十分です。

代わりにrfc3987パッケージを使用してください:

from rfc3987 import parse

parse('http://fdasdf.fdsfîășîs.fss/ăîăî', rule='IRI')
于 2012-09-24T12:46:49.833 に答える
1

urlparseの実装における唯一の文字セット依存コードは、スキームにASCII文字、数字、および[+-。]文字のみを含めることを要求しています。それ以外の場合は完全に不可知論であるため、ASCII以外の文字でも正常に機能します。

これは文書化されていない動作であるため、(プロジェクトでのテストで)それが引き続き当てはまるかどうかを確認するのはあなたの責任ですが、IRIを破るために変更されるとは思いません。

urllibは、IRIをASCII URIとの間で変換するための引用関数を提供しますが、ドキュメントではIRIについて明示的に言及されておらず、場合によっては壊れています。urllib.quoteとurllibに使用できるUnicode対応の代替関数はありますか.Python 2.6.5で引用符を外しますか?

于 2012-09-24T12:41:03.390 に答える