c# - URL 编码 ASCII/UTF16 字符

标签 c# ascii urlencode utf-16

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

相关文章:

c# - 如何在 Razor View MVC C# 中将文本转换为超链接或 ActionLink

c# - 我正在运行一个 Web 应用程序并想用 C# 代码更新我的 SQL Server 用户配置文件数据库,但无论我做什么我都无法让它工作

比较输入的 ASCII 值(C 程序)

node.js - Nodejs urlencode 二进制数据

Twitter 分享 - 将 urlencode 参数 %2C 重定向到 %252C

c# - 如何获取 mshtml.IHTMLSelectionObject 的开始和结束位置?

c# - 过滤 GroupJoin 查询

C 没有隐式将 int 转换为 char

php - Android ASCII 表情和 PHP

php - 重力形式签名——从 PHP 到 Python