2017年08月14日
川俣晶の縁側ソフトウェア技術雑記 total 4022 count

【C#でファイルのパスをURIに変換する方法】が上手く機能しないケース

Written By: 川俣 晶連絡先

問題 §

C#でファイルのパスをURIに変換する方法が上手く機能しないケースがある。

再現コード §

using System;

class Program

{

    static void Main(string[] args)

    {

        var uri = new Uri(@"C:\###\b c%20.txt");

        Console.WriteLine(uri.AbsoluteUri);

        var uri2 = new Uri(@"C:\あ\b c%20.txt");

        Console.WriteLine(uri2.AbsoluteUri);

    }

}

.NET F/ W4までの実行結果 (期待通り) §

file:///C:/%23%23%23/b%20c%2520.txt

file:///C:/%E3%81%82/b%20c%2520.txt

.NET F / W 4.5以降での実行結果 (2つめは期待に反する) §

file:///C:/%23%23%23/b%20c%2520.txt

file:///C:/%E3%81%82/b%20c%20.txt

回避コード例 (%を別の文字に一時的に置き換えて処理させない) §

var uri = new Uri(filename.Replace("%", "*"));

return new Uri(uri.AbsoluteUri.Replace("*", "%25"));

参考URI §

https://developercommunity.visualstudio.com/content/problem/89895/uri-constructor-not-encode-character-after-net-45.html