UrlEncode - Javascript与C#

问题描述:

我有一个URL需要一些参数。这些参数的值可以是重音字符,所以我绝对需要对UrlEncode进行编码。奇怪的是,我看到行为或Javascript和.NET之间的区别。UrlEncode - Javascript与C#

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

谢谢!

+0

我刚才也有同样的问题。感谢您提出“为我”这个问题 - 让我很快解决了这个问题。 – 2010-03-18 09:33:23

System.Web.HttpUtility.UrlEncode将使用UTF8(我想..)作为其默认的编码器,可以通过指定一个改变这种..

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

虽然它可能是最好指定实际代码页或什么不是,而不是依靠操作系统默认。

参考:

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提供的字符串相匹配,除了十六进制字符的情况。

Encoding.Default仅适用于您的系统当前代码页设置为西欧。现在,这可能是重要的,如果JavaScript可以在同一台计算机作为.NET编码器上运行,但如果没有,那么你可以强制代码页转换为西欧一个:

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

您也可以尝试的base64编码它们。

有一个previous post处理它在JavaScript中。

至于在.NET中,有很多例子显示如何做到这一点。这里有一个关于Google的found

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

在JavaScript中(根据此网站: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!