В общедоступном API WeasyPrint я принимаю имена файлов (среди других типов )для ввода HTML. Любое имя файла, которое работает со встроенным -в open()
, должно работать, но мне нужно преобразовать его в URL-адрес в схеме file://
, который позже будет передан в urllib.urlopen()
.
(Внутри все находится в форме URL. Мне нужно иметь «базовый URL» для документов, чтобы разрешать относительные ссылки URL с помощью urlparse.urljoin()
.)
urllib.pathname2url — это начало:
Convert the pathname path from the local syntax for a path to the form used in the path component of a URL. This does not produce a complete URL. The return value will already be quoted using the quote() function.
Акцент сделан на мне, но мне нужен полный 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)
UTF -8 рекомендуется RFC 3987 (IRI). Но в этом случае ( URL предназначен для urllib, в конечном итоге )возможно, мне следует использовать sys.getfilesystemencoding()?
Однако, основываясь на литературе , я должен добавлять не только file:
, но и file://
... за исключением случаев, когда я не должен :В Windows результаты nturl2path.pathname2url()
уже начинаются с трех косых черт.
Итак, вопрос :в том, есть ли лучший способ сделать это и сделать его кроссплатформенным -?