在 HTML 页面和 HTTP 标头中使用的 URL 的默认字符集称为 ISO-8859-1 或 ISO Latin-1。
它与 UTF-8 不同,也与 ASCII 不同,但它确实适合每个字符一个字节。 0 到 127 的范围很像 ASCII,0 到 255 的整个范围与 Unicode 的 0000-00FF 范围相同。
因此,您可以通过将每个字符转换为一个字节来从 C# 字符串生成它,或者您可以使用 Encoding.GetEncoding("iso-8859-1") 获取一个对象来为您进行转换。
(在此字符集中,英磅符号为 163。)
背景
The RFC says 未编码的文本必须限制在传统的 7 位 US ASCII 范围内,并且必须对其他任何内容(加上特殊的 URL 分隔符)进行编码。但它留下了一个问题,即 8 位范围的上半部分使用什么字符集,使其依赖于 URL 出现的上下文。
该上下文是由另外两个标准 HTTP 和 HTML 定义的,它们确实指定了默认字符集,并且它们共同对实现者产生了一种实际上不可抗拒的力量,即假设地址栏包含引用 ISO- 的百分比编码。 8859-1。
ISO-8859-1 is the character set of text-based content sent via HTTP 除非另有说明。因此,当 URL 字符串出现在 HTTP GET 标头中时,它应该在 ISO-8859-1 中。
另一个因素是 HTML 也使用 ISO-8859-1 作为其默认值,并且 URL 通常源自 HTML 页面中的链接。因此,当您在记事本中制作一个简单的最小 HTML 页面时,您在该文件中键入的 URL 采用 ISO-8859-1 格式。
它有时被描述为标准中的“漏洞”,但实际上并非如此;只是 HTML/HTTP 填补了 RFC 为 URL 留下的空白。
因此,例如,this page 上的建议:
字符的 URL 编码包括
一个“%”符号,后跟
两位十六进制表示
ISO-Latin 的(不区分大小写)
字符的代码点。
(ISO-Latin 是 IS-8859-1 的另一个名称)。
理论就讲这么多。将此粘贴到记事本中,将其保存为 .html 文件,然后在几个浏览器中打开它。点击链接,Google 应该会搜索英镑。
<HTML>
<BODY>
<A href="http://www.google.com/search?q=%a3">Test</A>
</BODY>
</HTML>
它适用于 IE、Firefox、Apple Safari、Google Chrome - 我目前没有其他可用的。