我正在尝试对一些字符串进行 URL 编码,但是我遇到了 .Net 框架提供的方法的问题。
例如,我正在尝试对包含“â”字符的字符串进行编码。根据w3schools例如,我希望这个字符被编码为“%E2”(我必须调用的 PHP 系统也希望如此...)。
我试过使用这些方法:
System.Web.HttpUtility.UrlEncode("â");
System.Web.HttpUtility.UrlPathEncode("â");
Uri.EscapeUriString("â");
Uri.EscapeDataString("â");
然而,他们都将这个字符编码为: %C3%A2
我想这与 .Net 中的字符串是 UTF-16 编码这一事实有关。所以为了避免这个问题,我可以这样写:
"%" + ((int)character).ToString("X")
但是,我想知道该框架是否已经有一个内置方法(我在这里或其他地方找不到任何关于为什么我的角色以这种方式编码的答案)?
最佳答案
原因是 不是 .NET 使用 UTF-16 编码的字符串。原因是 UrlEncode(string)
overload默认使用 UTF-8,%C3%A2
是 â
的正确 UTF-8 编码:
The HttpUtility.UrlEncode method uses UTF-8 encoding by default. Therefore, using the UrlEncode method provides the same results as using the UrlEncode method and specifying UTF8 as the second parameter.
如果您喜欢不同的编码(例如 Latin-1 或代码页 1252,其中 â
对应于 %E2
),您可以使用另一个允许您的重载指定编码:
var x = HttpUtility.UrlEncode("â", Encoding.GetEncoding(1252));
关于c# - URL 编码 ASCII/UTF16 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21859233/