在WeasyPrint的公共API中,我接受HTML输入的文件名(以及其他类型).任何与内置函数一起使用的文件名open()都应该有效,但是我需要将它转换为file://稍后传递给的方案中的URL urllib.urlopen().
(一切都在内部的URL形式.我需要有一个文档的"基本URL",以解决相关的URL引用urlparse.urljoin().)
urllib.pathname2url是一个开始:
将路径名路径从路径的本地语法转换为URL路径组件中使用的表单.这不会产生完整的URL.返回值已经使用quote()函数引用.
重点是我的,但我确实需要一个完整的URL.到目前为止,这似乎有效:
def path2url(path):
"""Return file:// URL from a filename."""
path = os.path.abspath(path)
if isinstance(path, unicode):
path = path.encode('utf8')
return 'file:' + urlparse.pathname2url(path)
Run Code Online (Sandbox Code Playgroud)
RFC 3987(IRI)似乎推荐使用UTF-8 .但在这种情况下(URL最终用于urllib)也许我应该使用sys.getfilesystemencoding()?
然而,根据文献,我应该在前面加上不仅仅是file:但是file://......除非我不应该:在Windows上从结果nturl2path.pathname2url()已经以三条斜线开始.
所以问题是:有没有更好的方法来实现这一目标并使其跨平台?