我试图理解为什么我们要使用Base64将二进制数据转换为ASCII字符,而不是直接将其直接转换为ASCII。在我看到的每一次Base64计算中,您要么以ASCII字符开始,要么以二进制数据开始,在最终将其转换为Base64的过程中,该二进制数据被转换为ASCII。
我的问题是:为什么不只将其保留为ASCII,而不是将其转换为Base64子集?
我已经阅读了关于Stackoverflow的所有相关问题,尽管我发现了很多有用的信息,但这是我仍然无法解决的部分问题。
答案 0 :(得分:0)
有几个原因。我认为最重要的几个原因是:
64是一个很好的数字,它需要较少的计算(实际上只是移位)即可将字节转换为base64和反数。没有乘法或除法。简单,快速,尤其是在不增加邮件服务器负担的情况下。计算所需的输出缓冲区也很容易。
选择安全套。并非ASCII或ISO中的所有字符都是安全的。某些国家/地区更改了$
或&
或~
。并非所有字符集都具有{
。 ASCII更改了几个字符的定义(例如@
位置)。应允许使用空格(但在语义之外),控制字符应相同。不要假定ASCII在每台计算机或邮件服务器上都可用。实际上,ISO C 1990版本支持不带所有ASCII字符的计算机。
它不应与应该在其中使用的其他定界符(电子邮件标头,URL等)相干扰,因此请不要使用引号字符,而不要使用:
。不幸的是,网络使用/
和=
,但是由于有许多免费字符,因此解决问题很简单,而无需重新设计所有字符。