0

因为 HTTP 和 HTTPs 已经是8 位干净的,所以不需要使用 8 位干净的编码系统(例如Base64)。我们可以使用 8 位进行编码。

有继承限制吗?IE 控制什么可以用 8 位或 256 个排列表示?

我注意到 Unicode、UTF-8字节(1 字节表示)只能表示 128 个排列,因为 MSB 必须为 0 表示必须使用 1 字节表示。所以这是不可能的。

创建一个使用所有 8 位的系统专门用于在 8 位干净系统中传输数据的限制是什么?

唯一的要求是必须使用 256 个符号直观地表示数据。

4

1 回答 1

2

HTTP(或任何协议/系统)是 8 位干净的并不意味着您可以在协议中的任何位置简单地使用任何 8 位值。这仅意味着协议或系统能够在适当的情况下处理 8 位编码。

例如,HTTP 使用回车+换行符(十六进制值0D0A)来分隔标头字段和消息正文,因此您不能在标头中的任何位置同时使用这些值。此外,标题和正文可能会根据其中包含的数据类型对其字符编码有限制。如果 HTTP Content-Type 设置为text/html; charset=utf-8,则正文中的字符(例如<(十六进制值3C))将保留给 HTML 标记。HTTP 正文可能是 8 位干净的,但这并不意味着您可以在其中放入任何您想要的 8 位内容,您仍然必须符合 UTF-8(或其他一些编码)并遵守内容规则HTML 强加的。

Base64 的目的是对任意二进制数据进行编码,以便在其他编码方案中使用,其中字符以外[A-Za-z0-9+/]的字符保留用于特殊用途,或者完全无效(例如在 HTML 中,或在 URL 查询字符串中)。您不能只用完整的 8 位编码方案替换 Base64,因为 8 位方案在需要 Base64 的情况下无效。即使您使用的协议本身是 8 位干净的,也是如此。

简而言之,无论您使用什么二进制编码方案,都不仅仅依赖于 8 位干净而不是 8 位干净。这取决于您在其中使用编码的协议、协议控制字符是什么以及在什么情况下保留这些字符。

更新:

如果您真正想做的只是在 HTTP 响应中返回原始二进制文件,只需将 HTTP Content-Type 设置为application/octet-stream. 这将允许您在 HTTP 正文中返回任意二进制文件,而无需任何编码。

于 2013-09-25T17:29:39.977 回答