C# URL编码ASCII/UTF16字符
我正在尝试对一些字符串进行URL编码,但是我对.Net framework提供的方法有问题 例如,我正在尝试对包含–字符的字符串进行编码。例如,我希望这个字符被编码为“%E2”(我必须调用的PHP系统也希望这样…) 我尝试使用以下方法:C# URL编码ASCII/UTF16字符,c#,ascii,urlencode,utf-16,C#,Ascii,Urlencode,Utf 16,我正在尝试对一些字符串进行URL编码,但是我对.Net framework提供的方法有问题 例如,我正在尝试对包含–字符的字符串进行编码。例如,我希望这个字符被编码为“%E2”(我必须调用的PHP系统也希望这样…) 我尝试使用以下方法: System.Web.HttpUtility.UrlEncode("â"); System.Web.HttpUtility.UrlPathEncode("â"); Uri.EscapeUriString("â"); Uri.EscapeDataString("â
System.Web.HttpUtility.UrlEncode("â");
System.Web.HttpUtility.UrlPathEncode("â");
Uri.EscapeUriString("â");
Uri.EscapeDataString("â");
但是,它们都将此字符编码为:
%C3%A2
我想这与.Net中的字符串是UTF-16编码的这一事实有关。为了避免这个问题,我可以这样写:
"%" + ((int)character).ToString("X")
但是,我想知道框架是否已经有了一个内置的方法(我在这里或其他地方找不到任何关于为什么我的角色是这样编码的答案)只需将正确的编码传递给
System.Web.HttpUtility.UrlEncode
(Windows-1252
,Windows-1254
,ISO-8859-1
,ISO-8859-9
等,以适当者为准)
原因不是.NET使用UTF-16编码字符串。原因是默认情况下使用UTF-8,%C3%A2
是的正确UTF-8编码
默认情况下,HttpUtility.UrlEncode方法使用UTF-8编码。因此,使用UrlEncode方法提供的结果与使用UrlEncode方法并将UTF8指定为第二个参数相同
如果您喜欢不同的编码(例如,或代码页1252,其中对应于%E2
),您可以使用另一个重载来指定编码:
var x = HttpUtility.UrlEncode("â", Encoding.GetEncoding(1252));
谢谢你们两位。我没有注意到有超载……我给你们答案,因为你们是第一个回答的。
var x = HttpUtility.UrlEncode("â", Encoding.GetEncoding(1252));