【问题标题】:URL encode ASCII/UTF16 charactersURL 编码 ASCII/UTF16 字符
【发布时间】:2014-03-18 12:41:36
【问题描述】:

我正在尝试对一些字符串进行 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")

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

【问题讨论】:

    标签: c# ascii urlencode utf-16


    【解决方案1】:

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

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

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

    var x = HttpUtility.UrlEncode("â", Encoding.GetEncoding(1252));
    

    【讨论】:

    • 谢谢你们俩。我没有注意到有超载...我给你答案,因为你是第一个回答的人。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 2021-07-28
      相关资源
      最近更新 更多