我正在尝试对某些字符串进行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")
但是,我想知道框架是否已经有内置方法(我在这里或其他地方找不到任何答案,为什么我的字符以这种方式编码)?
答案 0 :(得分:4)
原因是不 .NET使用UTF-16编码的字符串。原因是UrlEncode(string)
overload默认使用UTF-8,%C3%A2
是â
的正确UTF-8编码:
HttpUtility.UrlEncode方法默认使用UTF-8编码。因此,使用UrlEncode方法提供与使用UrlEncode方法并将UTF8指定为第二个参数相同的结果。
如果您更喜欢不同的编码(例如Latin-1或代码页1252,â
对应%E2
),您可以使用另一个允许您指定编码的重载:< / p>
var x = HttpUtility.UrlEncode("â", Encoding.GetEncoding(1252));
答案 1 :(得分:3)
只需将正确的编码传递给System.Web.HttpUtility.UrlEncode
(Windows-1252
,Windows-1254
,ISO-8859-1
,ISO-8859-9
等,视适用者而定。
var s = HttpUtility.UrlEncode("â", Encoding.GetEncoding("Windows-1252"));