为什么Uri.ToString()根据输入字符串编码空格不同?

时间:2016-03-15 10:52:02

标签: c# uri spaces

当我在C#中的Uri上使用ToString()时,我对空格的编码有问题,根据输入字符串,它似乎表现不同。
这是我的代码片段:

public class Foo<T> 
{
    private Class<T> type;

    public Foo(Class<T> type) { 
        this.type = type; 
    }
}

我不明白。是因为它试图在每个输入字符串上找到编码并因重音而找到不同的编码吗?

修改

上面的代码只是我尝试在立即窗口中运行的一个示例,真正的代码片段在Uri参数的getter中看起来更像是这样:

StringBuilder sb1 = new StringBuilder("root");  
sb1.Append("/");
sb1.Append(System.Uri.EscapeDataString("something with spaces"));
Uri result1 = new System.Uri(sb1.ToString(), UriKind.Relative);
// result1.ToString() returns "root/something%20with%20spaces"

StringBuilder sb2 = new StringBuilder("root");  
sb2.Append("/");
sb2.Append(System.Uri.EscapeDataString("something with spacés and accènts")); // "root/something%20with%20spac%C3%A9s%20and%20acc%C3%A8nts"
Uri result2 = new System.Uri(sb2.ToString(), UriKind.Relative);
// result2.ToString() returns "root/something with spacés and accènts"

这些部分是可以有斜线,重音符号,空格等的标签。在我的解决方案的其他地方,我调用public Uri RelativeUri { get { List<string> partsOfUri = new List<string>(); this.getParts(this, parts); StringBuilder sb = new StringBuilder(this.Root); parts.Reverse(); parts.ForEach(p => { sb.Append("/"); sb.Append(System.Uri.EscapeDataString(p)); // to avoid problems with '/' in parts }); return new System.Uri(sb.ToString(), UriKind.Relative); } } 并且我得到了这种奇怪的行为。

MyObject.RelativeUri.ToString()返回Encoding.Default

1 个答案:

答案 0 :(得分:0)

我尝试过运行你的代码。

它正确地给出了以下结果:

root/something%20with%20spac%C3%A9s%20and%20acc%C3%A8nts

您能分享一下您尝试运行此代码的方式和位置吗?

仅供您参考,Encoding.Default给出了以下结果:

System.Text.SBCSCodePageEncoding