Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何检查字符串是否是有效的IRI?_Python_Url_Python 2.7_Urlparse - Fatal编程技术网

Python:如何检查字符串是否是有效的IRI?

Python:如何检查字符串是否是有效的IRI?,python,url,python-2.7,urlparse,Python,Url,Python 2.7,Urlparse,是否有一个标准的函数来检查一个,检查一个我可以使用的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.u

是否有一个标准的函数来检查一个,检查一个我可以使用的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"

我得到的是
是一个url
。这是否意味着我对有效的IRI测试很好?还有别的办法吗

中唯一的字符集敏感代码要求方案仅包含ASCII字母、数字和[+-.]字符;否则它是完全不可知的,因此可以很好地处理非ASCII字符

既然如此,您有责任检查它是否继续是这种情况(在您的项目中进行测试),但我不认为它会被更改为破坏IRIs


urllib提供了将IRIs转换为ASCII URI或从ASCII URI转换为ASCII URI的功能,尽管它们在文档中仍然没有明确提及IRIs,并且在某些情况下会被破坏:

使用
URLPRASE
不足以测试有效的IRI

请使用以下选项:


你为什么不好好做呢?您的示例是否违反了IRI标准定义的任何规则?换句话说:你是在问我们你的测试是否违反了IRI规则?你自己做过这项研究吗?@Jan PhilipGehrcke我在问一个比我更有IRI经验的人,我是否擅长这项研究。
ImportError:没有名为rfc3987的模块
,因此它不是标准,
pip install rfc3987
你必须安装他链接到Works(+1)的软件包,接受,您是对的:
使用urlparse不足以测试有效的IRI
,因为使用上面提供的代码
url
字符串不是有效的IRI。但是转义有效:
parse(
)http://fdasdf.fdsf%C3%AE%C4%83%C8%99%C3%AEs.com/%C4%83%C3%AE%C4%83%C3%AE“,rule='IRI')
我得到:
{'fragment':无,'path':'/%C4%83%C3%AE%C4%83%C3%AE','scheme':'http','authority':'fdasdf.fdsf%C3%AE%C4%83%C8%99%C3%AEs.com','query':无}
我只希望更多的人在谷歌搜索时能找到这个答案。
urllib.quote(url)
似乎从
http://
中的
冒号转义到
http%3A//
@EduardFlorinescu是的,默认情况下,它只适用于引用IRI的路径部分;对于完整的IRI,您需要解析、引用和重新组装组件。
from rfc3987 import parse

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