まず、「。」ということを指摘する価値があります。ファイル名では完全に合法ですが、 "/"はありません。したがって、引用する例では翻訳は必要ありませんが、 "www.ibm.com/path1/file1.jpg"となります。
単純なstring.Replace
は、ファイル名では合法だがURLでは違法な文字を見つけることができると仮定すると、ここでは最良の解決策になります。
string.Replace("/", "§");
は、ファイル名に変換すると::不正なURL文字は(URLでは合法でもよい)、 "§" であると仮定すると
は、あなたが持っている
string.Replace("§", "/");
翻訳し直してください。
This page on URL Encodingは、URLSの有効、無効、安全ではない(有効であるが特別な意味を持つ)文字を定義します。 ISO-Latinセット80-FFの16進数(128-255小数)の「上半分」の文字は合法ではありませんが、ファイル名では問題ありません。
無効なファイル名文字のセットに含まれるURLの各文字に対して、これを行う必要があります。これはGetInvalidFileNameChars
を使用して取得できます。あなたは、適切な文字のペアを見つけることができないと仮定すると
UPDATE
は、その後、別の解決策は、ルックアップテーブルを使用することです。一方の列には、生成された他方のファイル名のURLが格納されます。生成された名前が一意である限り(GUIDが行う)、一方向から他方向に向かうために双方向ルックアップを実行できます。
@ChrisF - ファイル名に合法的なURL文字が何であるか知っていますか?私はあなたのアプローチを使用することができます私はリストを知っていた場合。見た目はどこ? –
この方法には問題がある可能性があります。たとえば、 '。'文字が有効なファイル名の文字であるurlに存在していた場合、これはあいまいさにつながる可能性があります。 URLの特殊文字がどのように%を使ってASCII値に変換されるかのような何らかの規約を選択するのがベストでしょう。 –
@Gunner - あなたが私の答えを読んだ場合、法的なファイル文字であるが違法なURLを見つけ出す必要があることを指摘します。この場合、URLには表示されないので、「/」を「/」に変換することは安全です。あなたはすべての違法な文字を繰り返す必要があります。 – ChrisF