URL编码ASCII / UTF16字符

我正在尝试对一些字符串进行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)重载使用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)); 

只需将正确的编码传递给System.Web.HttpUtility.UrlEncodeWindows-1252Windows-1254ISO-8859-1ISO-8859-9等,视情况而定)

  var s = HttpUtility.UrlEncode("â", Encoding.GetEncoding("Windows-1252"));