更换Base64 - 有哪些限制?

时间:2013-09-25 13:32:51

标签: encoding base64

由于HTTP和HTTP已经8 bit clean,因此无需使用8位干净编码系统(例如Base64)。我们可以用8位编码。

是否有任何继承限制? I.E.什么可以用8位或256个排列表示什么?

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

创建一个专门用于在8位清洁系统中传输数据的8位系统有什么限制?

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

1 个答案:

答案 0 :(得分:2)

8位清理的HTTP(或任何协议/系统)并不意味着您可以在协议中的任何位置使用任何8位值。这意味着只有协议或系统能够在正确的情况下处理8位编码。

例如,HTTP使用回车符+换行符(十六进制值0D0A)来分隔标题字段和邮件正文,因此您无法在标题中的任何位置使用这些值。此外,标题和主体可能基于其中包含的数据类型而对其字符编码具有限制。如果HTTP Content-Type设置为text/html; charset=utf-8,则会为HTML标记保留正文中的字符<(十六进制值3C)。 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主体中返回任意二进制文件而无需编码。