Uri.UnescapeDataString在不同的计算机上失败

时间:2013-03-05 23:20:30

标签: c# regex parsing uri

在我的开发计算机上,一切工作正常,花花公子但是当我在另一台Windows7计算机上测试程序时,我得到一个System.UriFormatException无效的URI:字符串中有一个无效的序列。 / em>在以下代码中:Uri.UnescapeDataString(section);

起初我以为第二台计算机从dev pc接收到不同的数据,所以我复制了未通过文件的html字符串,并将我的代码缩减为:

static void Err(string s){/*Picked up by external logging*/}

private static void GetValue()
{
    try
    {
        var html = File.ReadAllText("ld.txt");

        //Retrieve section we want
        var section = Regex.Match(
            html,
            "etc_etc(.*): ",
            RegexOptions.Singleline)
                                .Groups[1].ToString();

        Uri.UnescapeDataString(section);
    }
    catch (Exception ex)
    {
        Err(ex.ToString());
    }
}

在dev pc上工作正常,但第二台计算机再次收到异常。他们都从完全相同的ld.txt文件中加载完全相同的html,然后用它做同样的事情......两台PC都是x64 Win7。是什么给了什么?

1 个答案:

答案 0 :(得分:8)

UnescapeDataString似乎在CLR 4.0和4.5之间发生了变化

我可以在安装了不同版本的.Net的两台机器上重现这一点(即使编译为目标.Net 4.0)。

你的开发机器上是否有VS 2012(因此.Net 4.5)和另一台计算机上只有.Net 4?

此代码在.Net 4.0上抛出异常,传递.Net 4.5

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("CLR version: " + Environment.Version);
        Console.WriteLine(Uri.UnescapeDataString("%"));
    }
}