HttpUtility.UrlEncode标准编码与指定编码?

时间:2010-12-13 13:32:03

标签: c# .net urlencode

之间有什么区别:

HttpUtility.UrlEncode("some string with é and β and stuff")
HttpUtility.UrlEncode("some string with é and β and stuff", Encoding.UTF8)
HttpUtility.UrlEncode( "some string with é and β and stuff", Encoding.Default )

结果是:

some+string+with+%c3%a9+and+%ce%b2+and+stuff
some+string+with+%c3%a9+and+%ce%b2+and+stuff
some+string+with+%e9+and+%df+and+stuff

测试时,我得到前两个相同的结果,所以我可以安全地假设UTF8是默认值,除非指定,或者在不同的系统上有所不同吗?

我看到了unicode转义序列的示例,如下所示:

%u00e9(é)

相当确定paypal会在他们的IPN请求中发送。为什么.NET不像这样编码?

2 个答案:

答案 0 :(得分:7)

Reflector中方法HttpUtility.UrlEncode Method (String)的源代码:

public static string UrlEncode(string str)
{
    if (str == null)
    {
        return null;
    }
    return UrlEncode(str, Encoding.UTF8);
}

问题:

  

我可以安全地假设UTF8是默认值,除非指定

是的,你可以。

答案 1 :(得分:3)

是的,您可以放心地假设UTF8是基于上述示例的默认值。请记住,.NET的默认编码由操作系统的底层代码页决定。

您从PayPal看到的'%u00e9'示例实际上是non-standard implementation,用于编码Unicode字符。根据维基百科的说法,W3C拒绝了这一实施。