ZBLOG

百分比编码和解码 的英文术语和相关规范?

好的,百分比编码和解码是Web技术中一个非常基础且重要的概念。以下是相关的英文术语、核心规范和详细解释。

1. 英文术语

中文 英文 备注
百分比编码 Percent-Encoding 最标准、最正式的术语
URL 编码 URL Encoding 一个常用但非官方的同义词,特指在URL上下文中的百分比编码
解码 Decoding -
百分比解码 Percent-Decoding -
转义 Escaping 一个更通用的术语,百分比编码是其中一种实现方式
取消转义 Unescaping -

2. 核心规范 (RFC Standards)

百分比编码的定义和用法主要由一系列IETF的RFC(Request for Comments)文档规范。最重要的几个是:

a. RFC 3986 (Uniform Resource Identifier (URI): Generic Syntax)

这是当前定义URI(包括URL)语法的核心标准。

  • 核心内容:正式定义了“百分比编码”机制。
  • 格式:一个百分号%后跟两个十六进制数字(Hexadecimal digits)。例如,空格被编码为 %20
  • 保留字符与非保留字符
    • 保留字符 (Reserved Characters):如 :, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ;, =。这些字符在URI中有特殊含义,如果要在数据中使用它们的字面意思,就必须进行编码(例如,查询参数中的&必须编码为%26)。
    • 非保留字符 (Unreserved Characters):字母(A-Z, a-z)、数字(0-9)以及字符 -, ., _, ~。这些字符永远不需要编码。
  • 未保留字符不应被编码:标准建议,为了可读性,除非必要,否则不应对未保留字符进行编码。

b. RFC 1866 (HTML 2.0) and application/x-www-form-urlencoded

虽然被后来的RFC更新,但它引入了 application/x-www-form-urlencoded 格式,这是百分比编码的另一个主要应用场景。

  • 应用场景:HTTP POST请求提交表单数据时(Content-Type: application/x-www-form-urlencoded),以及URL的查询字符串(Query String)部分(?key1=value1&key2=value2)。
  • 与RFC 3986的区别
    • 它将空格编码为加号 +(而不是 %20)。解码时,加号必须被转换回空格。
    • 这是历史遗留问题,导致在处理表单数据和纯URL路径时需要特别注意。

c. WHATWG URL Living Standard

由于Web浏览器是处理URL的主要实践者,由Web超文本应用技术工作组(WHATWG)维护的《URL Living Standard》现在被认为是Web平台事实上的标准。

  • 特点:它是一个“活”的标准,会不断更新以反映浏览器的实际行为。
  • 重要规定:明确要求使用UTF-8字符集对非ASCII字符进行百分比编码。这解决了早期不同系统使用不同字符集(如ISO-8859-1)导致的混乱问题。

3. 编码过程总结

  1. 确定字符集:现代Web标准(WHATWG)要求使用UTF-8将字符串转换为字节序列。
  2. 遍历字节:对字符串转换后的每个字节进行处理。
  3. 判断是否需要编码
    • 如果该字节对应的字符是非保留字符(如字母、数字、-_.~),则保持不变。
    • 否则,将其转换为百分号后跟两个大写的十六进制数字的形式(例如,字节值0x20【空格】-> %20;UTF-8下的“中”字【字节为0xE4, 0xB8, 0xAD】-> %E4%B8%AD)。
  4. 特殊处理 (application/x-www-form-urlencoded): 在表单编码中,空格除了可以被编码为%20外,还可以被替换为+号。

Qt中的对应关系

根据之前的讨论和这些规范,就很容易理解Qt中两个函数的区别:

  • QUrl::fromPercentEncoding(): 遵循的是现代URL规范(WHATWG/RFC 3986),使用UTF-8解码,并且会正确处理URL中的保留字符语义。它返回人类可读的QString
  • QByteArray::fromPercentEncoding(): 是一个更底层的工具。它默认使用Latin-1(反映了旧时代的标准),但允许你指定其他编解码器。它返回原始的QByteArray,适合处理不一定是文本的通用百分比编码数据(如表单数据中的二进制内容)。如果需要处理表单中的+号,你需要额外处理。

希望这个详细的解释能帮助您彻底理解这个概念!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=24192

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?