6

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

假设我尝试对“éléphant”一词进行 UrlEncode。在 JavaScript 中(根据本网站:http ://www.albionresearch.com/misc/urlencode.php ),我得到以下信息:%E9l%E9phant。这对我来说似乎是正确的。但是,在 .NET 中使用此调用 (System.Web.HttpUtility.UrlEncode("éléphant")) 我得到“%c3%a9l%c3%a9phant”。怎么了?我错过了什么?如果我想在 .NET 中获取 %E9l%E9phant 该怎么办?

谢谢!

4

5 回答 5

10

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

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

尽管最好指定一个实际的代码页或其他代码页,而不是依赖于操作系统默认值。

于 2009-02-05T05:31:35.573 回答
7

在 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!

于 2009-02-05T12:27:53.843 回答
5

参考:

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

不同之处在于一个是UTF-8URL 编码,而另一个是给你ANSIURL 编码。

在 .NET 中,尝试:

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

我明白了

    %e9 l     %e9 phant

因此。这与您为 JavaScript 提供的字符串匹配,但 Hex Character 大小写除外。

于 2009-02-05T05:34:59.670 回答
3

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

System.Web.HttpUtility.UrlEncode("éléphant", Encoding.GetEncoding(1252));
于 2009-02-05T05:38:25.277 回答
2

您也可以尝试对它们进行 base64 编码。

之前有一篇文章涉及在 JavaScript 中执行此操作。

至于在 .NET 中,有很多例子展示了如何做到这一点。这是我Google 上找到的。

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

于 2009-02-05T06:22:12.570 回答