C# 中是否有一些算法可以使用可以在 Web 浏览器中正确显示的符号对 url 进行编码?
类似Base64的东西。
标准(RFC 3986又名STD 66)为您列出。特别是§2 和 2.1:
2. 人物
URI 语法提供了一种将数据编码为字符序列的方法,大概是为了识别资源。反过来,URI 字符经常被编码为八位字节以进行传输或表示。本规范不强制要求任何特定的字符编码用于 URI 字符和用于存储或传输这些字符的八位字节之间的映射。当 URI 出现在协议元素中时,字符编码由该协议定义;如果没有这样的定义,则假定 URI 与周围文本采用相同的字符编码。
ABNF 表示法将其终端值定义为基于 US-ASCII 编码字符集 [ASCII] 的非负整数(代码点)。因为 URI 是一个字符序列,所以我们必须颠倒这种关系才能理解 URI 语法。因此,ABNF 使用的整数值必须通过 US-ASCII 映射回其对应的字符,以完成语法规则。
URI 由一组有限的字符组成,这些字符由数字、字母和一些图形符号组成。这些字符的保留子集可用于分隔 URI 内的语法组件,而其余字符(包括未保留集和不充当分隔符的那些保留字符)定义每个组件的标识数据。
2.1。百分比编码
当八位字节的对应字符超出允许的集合或用作组件的分隔符或组件内时,百分比编码机制用于表示组件中的数据八位字节。百分比编码的八位位组被编码为一个字符三元组,由百分比字符“%”后跟表示该八位位组数值的两个十六进制数字组成。例如,“%20”是二进制八位字节“00100000”(ABNF:%x20)的百分比编码,在 US-ASCII 中对应于空格字符 (SP)。2.4 节描述了何时应用百分比编码和解码。
pct-encoded = "%" HEXDIG HEXDIG
大写十六进制数字“A”到“F”分别等效于小写数字“a”到“f”。如果两个 URI 仅在百分比编码的八位字节中使用的十六进制数字不同,则它们是等价的。为了保持一致性,URI 生产者和规范化者应该对所有百分比编码使用大写的十六进制数字。
通常,唯一可以在 URL 中自由表示而无需百分比编码的字符是
A
-Z
a
-z
0
-9
-._~
:/?#[]@!$&'()*+,;=
根据标准,任何其他字符都必须进行正确的百分比编码。
进一步注意,URL 可能仅包含从 US-ASCII 字符集 (0x00-0x7F) 中提取的字符:如果您的 URL 包含超出该代码点范围的字符,则需要对这些字符进行适当的编码以在 US-ASCII 中表示(例如,通过 HTML/XML 实体引用)。此外,您的应用程序负责解释此类内容。