私のデスクトップアプリケーションは、インターネットからファイルをダウンロードする必要があります。ファイルへのパスは既知です。ファイル名自体は準変数です。つまり、他の誰かが新しいファイルをそこに置くことになり、私のアプリケーションはそれらをダウンロードする必要があります。Delphiでファイル名をURLエンコードするにはどうすればよいですか?
ここで、URLが安全で、正しく解釈されるようにしたいと思います。また、ファイル名に "#"がある場合(わからない)、私はそれをエンコードしたいと思います。 Javascriptには、encodeURI
とencodeURIComponent
の2つの異なる機能があります。後者は、とりわけ '#'文字をエンコードします。 もちろん、私は自分自身をロールバックすることができますが、私はそれのための準備ができていることに気づきました。そして、私は古い間違いを避けることもできます。
WinInetシリーズのAPI関数(InternetOpenとそのilk)を使用するオブジェクトでファイルをダウンロードします。
だから私はMSDNで騒ぎ始めました。確かに、UrlCanonicalizeがあります。しかし、UrlEscape,CreateUri(それはDelphi 2010のユニットにはありません)、そして最後にInternetCreateUrlというURLがあり、URL全体を分割する必要があります。 URLの最初の部分をURLエンコードされたファイル名に連結したいと思います。
また、それらはすべて、異なるバージョンのフラグを持っていますが、Windowsのバージョンによって変更された異なるデフォルトがあります。これ以上の違いはわかりません。誰がこの目的に最も適しているかを知っていますか?
名はエンコード%進する必要があります。私はどの機能がそれをしているのか分かりません。 – Deanna
私の質問で言及したすべての機能は、ある時点でそれを行います。どんな文字がどのフラグでエンコードされるか、すべてのUnicode文字が正しくエンコードされるかどうかは、私には非常に不明です。 – Martijn
注意してください。正しくエンコードされたファイル名を受け取ったからといってファイル名であるとは限りません。ファイル名、特に '..'のような相対パスの構成要素を含むファイル名を受け取った場合、予期せぬファイルを誤って上書きする可能性があります。 –