Unix文件路径是否为合法URL?Python与JS解析差异探究
Unix文件路径是否属于合法URL?Python与JavaScript的解析差异对比
假设我们有字符串 /path/to/file,用Python的urlparse解析时,会将其视为合法URL,返回结果如下:
from urllib.parse import urlparse urlparse('/path/to/file') # ParseResult(scheme='', netloc='', path='/path/to/file', params='', query='', fragment='')
但用JavaScript执行相同操作时会抛出错误:
new URL('/path/to/file') // Uncaught TypeError: Failed to construct 'URL': Invalid URL
我想知道哪种实现是正确的,Unix文件路径是否应被视为合法URL?我没深入研究RFC标准,但个人更倾向Python的实现——通过解析后检查scheme字段,可以清晰区分本地文件与远程资源,这对编写支持本地/远程文件加载的程序很有用。
更新
根据相关文档说明:
url:一个表示绝对或相对URL的字符串...如果是相对URL,则必须提供base作为基准URL;如果是绝对URL,给定的base会被忽略。
如果给JavaScript的URL构造函数提供base参数,就不会报错:
new URL('/path/to/file', 'file://')
不过在处理相对路径./path/to/file时,两者的实现仍有差异:JavaScript会忽略./,而Python会保留它。
JavaScript 表现
new URL('/path/to/file', 'file://') new URL('./path/to/file', 'file://') // 两者结果一致: // URL {origin: 'file://', protocol: 'file:', pathname: '/path/to/file'}
Python 表现
from urllib.parse import urlparse urlparse('/path/to/file') # ParseResult(scheme='', netloc='', path='/path/to/file', params='', query='', fragment='') urlparse('./path/to/file') # ParseResult(scheme='', netloc='', path='./path/to/file', params='', query='', fragment='')
内容的提问来源于stack exchange,提问作者link89
相关产品推荐
相关产品推荐

