UrlEncode – Javascript与C#

我有一个需要一些参数的URL。 这些参数的值可以是重音字符,所以我绝对需要UrlEncode它们。 奇怪的是,我发现行为或Javascript和.NET之间存在差异。

让我们假装我尝试将“éléphant”这个词用于UrlEncode。 在JavaScript中(根据此WebSite: http : //www.albionresearch.com/misc/urlencode.php ),我得到以下内容:%E9l%E9phant。 这对我来说是正确的。 但是,在这个调用的.NET中(System.Web.HttpUtility.UrlEncode(“éléphant”))我得到“%c3%a9l%c3%a9phant”。 怎么了? 我错过了什么? 如果我想在.NET中获得%E9l%E9phant,我该怎么办?

谢谢!

System.Web.HttpUtility.UrlEncode将使用UTF8(我认为..)作为其默认编码器,您可以通过指定一个来更改它。

System.Web.HttpUtility.UrlEncode("éléphant", Encoding.Default); // %e9l%e9phant 

虽然可能最好指定实际的代码页或不是,而不是依赖于操作系统默认值。

在JavaScript中(根据此WebSite: http : //www.albionresearch.com/misc/urlencode.php ),我得到以下内容:%E9l%E9phant。

那页错了。 JavaScript也使用UTF-8,默认情况下是.NET。 亲自尝试一下:

 javascript:alert(encodeURIComponent('éléphant')) %C3%A9l%C3%A9phant 

今天的url是UTF-8。 不要再尝试使用cp1252了。 UTF-8是你的朋友。 信任UTF-8!

参考:

 js: %E9 l %E9 phant .net: %c3 %a9 l %c3 %a9 phant 

不同之处在于,一个是UTF-8 URL编码,而另一个是为您提供ANSI URL编码。

在.NET中,尝试:

 Dim a As String = System.Web.HttpUtility.UrlEncode( _ "éléphant", _ Text.Encoding.Default) 

我明白了

  %e9 l %e9 phant 

结果是。 这与您为JavaScript提供的字符串匹配,但Hex字符大小写除外。

如果系统的当前代码页设置为西欧,则Encoding.Default仅适用于您。 现在,如果Javascript也在与.NET编码器相同的机器上运行,那么这可能很重要,但如果没有,那么您可以强制将代码页强制转换为西欧代码页:

 System.Web.HttpUtility.UrlEncode("éléphant", Encoding.GetEncoding(1252)); 

您也可以尝试base64编码。

之前的post涉及在JavaScript中执行此操作。

至于.NET,有很多例子说明了如何做到这一点。 这是我在谷歌上发现的一个。

当然,字符串可能比urlencoding更大一些。 但是,它们将被混淆,这取决于应用程序可能是一个优势。