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,并且在某些情况下它们被破坏了:Is there a unicode-ready alternative I can use for urllib.quote and urllib .unquote 在 Python 2.6.5 中?

于 2012-09-24T12:41:03.390 回答