URL 编码 ASCII/UTF16 字符

Mat*_*ieu 3 c# ascii urlencode utf-16

我正在尝试对一些字符串进行 URL 编码,但是我遇到了 .Net 框架提供的方法的问题。

例如,我正在尝试包含 'â' 字符的编码字符串。例如,根据w3schools 的说法,我希望这个字符被编码为 '%E2' (我必须调用的 PHP 系统也期望这个......)。

我尝试使用这些方法:

System.Web.HttpUtility.UrlEncode("â");
System.Web.HttpUtility.UrlPathEncode("â");
Uri.EscapeUriString("â");
Uri.EscapeDataString("â");
Run Code Online (Sandbox Code Playgroud)

但是,他们都将此字符编码为:%C3%A2

我想这与 .Net 中的字符串是 UTF-16 编码的事实有关。所以为了避免这个问题,我可以这样写:

"%" + ((int)character).ToString("X")
Run Code Online (Sandbox Code Playgroud)

但是,我想知道该框架是否已经有一个内置方法(我在这里或其他地方找不到任何关于为什么我的字符以这种方式编码的答案)?

Hei*_*nzi 5

原因不是.NET 使用 UTF-16 编码的字符串。原因是UrlEncode(string)重载默认使用 UTF-8,并且%C3%A2是正确的 UTF-8 编码â:

HttpUtility.UrlEncode 方法默认使用 UTF-8 编码。因此,使用 UrlEncode 方法提供的结果与使用 UrlEncode 方法并将 UTF8 指定为第二个参数的结果相同。

如果您更喜欢不同的编码(例如Latin-1或 Codepage 1252,â对应于%E2),您可以使用另一个重载来指定编码:

var x = HttpUtility.UrlEncode("â", Encoding.GetEncoding(1252));
Run Code Online (Sandbox Code Playgroud)