Konwertuj nazwę pliku na URL pliku: //

W publicznym interfejsie API WeasyPrint akceptuję nazwy plików (między innymi) dla wejść HTML. Dowolna nazwa pliku, która działa z wbudowanymopen() powinien działać, ale muszę go przekonwertować na URL wfile:// schemat, który zostanie później przekazanyurllib.urlopen().

(Wszystko jest wewnętrznie w postaci adresu URL. Muszę mieć „podstawowy adres URL” dla dokumentów, aby móc odwoływać się do względnych adresów URLurlparse.urljoin().)

urllib.pathname2url to początek:

Konwertuj ścieżkę do ścieżki z lokalnej składni dla ścieżki do formularza używanego w komponencie ścieżki adresu URL.Nie tworzy to pełnego adresu URL. Wartość zwracana będzie już cytowana za pomocą funkcji quote ().

Nacisk jest mój, ale potrzebuję pełnego adresu URL. Jak na razie wydaje się to działać:

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 wydaje się być zalecany przezRFC 3987 (IRI). Ale w tym przypadku (adres URL jest przeznaczony dla urllib, w końcu) może powinienem użyćsys.getfilesystemencoding ()?

Jednak na podstawieliteratura Powinienem nie tylko dodawaćfile: alefile:// ... z wyjątkiem sytuacji, gdy nie powinienem: W systemie Windows wynik znturl2path.pathname2url() już zaczynają się od trzech ukośników.

Pytanie brzmi: czy jest lepszy sposób, aby to zrobić i sprawić, by był on wieloplatformowy?

questionAnswers(4)

yourAnswerToTheQuestion