我经常听到人们谈论“64进制编码”。它的用途是什么?
当前回答
对Brad所说的进行一点扩展:许多电子邮件和Usenet的传输机制以及其他移动数据的方式都不是“8位干净”的,这意味着标准ascii字符集之外的字符可能在传输中被破坏——例如,0x0D可能被视为回车符,并被转换为回车符和换行符。64进制将所有二进制字符映射为几个标准ascii字母、数字和标点符号,这样它们就不会被打乱。
其他回答
对Brad所说的进行一点扩展:许多电子邮件和Usenet的传输机制以及其他移动数据的方式都不是“8位干净”的,这意味着标准ascii字符集之外的字符可能在传输中被破坏——例如,0x0D可能被视为回车符,并被转换为回车符和换行符。64进制将所有二进制字符映射为几个标准ascii字母、数字和标点符号,这样它们就不会被打乱。
在计算机的早期,当电话线系统间的通信不是特别可靠时,一种快速而肮脏的验证数据完整性的方法被使用:“位奇偶校验”。在这种方法中,传输的每个字节都有7位数据,第8位将是1或0,以强制字节中1位的总数为偶数。
因此,0x01将作为0x81传输;0x02将是0x82;0x03仍然是0x03等等。
为了进一步完善这个系统,当定义ASCII字符集时,只有00-7F被分配字符。(直到今天,所有设置在80-FF范围内的字符都是非标准的)
当时的许多路由器都把奇偶校验和字节转换放在硬件中,迫使连接到它们的计算机严格处理7位数据。这迫使电子邮件附件(以及所有其他数据,这就是为什么HTTP和SMTP协议是基于文本的)转换为纯文本格式。
这些路由器很少能活到90年代。我非常怀疑它们中任何一个现在还在使用。
Base64是一个二进制到文本的编码方案,以ASCII字符串格式表示二进制数据。它被设计用来在网络通道中传输二进制格式的数据。
Base64机制使用64个字符进行编码。这些字符包括:
10个数值:即0,1,2,3,…,9 大写字母:即A,B,C,D,…,Z 小写字母:即a,b,c,d,…,z 2个特殊字符(这些字符取决于操作系统):即+,/
base64如何工作
使用base64算法编码字符串的步骤如下:
计算字符串中的字符数。如果它不是3的倍数,那么用特殊字符(即=)填充它,使它是3的倍数。 使用ASCII表将字符串转换为ASCII二进制格式8位。 转换为二进制格式后,将二进制数据分成6位的块。 将6位二进制数据块转换为十进制数。 根据base64索引表将小数转换为字符串。这个表可以是一个例子,但正如我所说,2个特殊字符可能会有所不同。
现在,我们得到了输入字符串的编码版本。
让我们举个例子:将字符串THS转换为base64编码字符串。
计算字符数:它已经是3的倍数。 转换为ASCII二进制格式8位。我们得到(T)01010100 (H)01001000 (S)01010011 将二进制数据分成6位的块。我们收到010101 000100 100001 010011 将6位二进制数据块转换为十进制数。得到21 4 33 19 根据base64索引表将小数转换为字符串。我们有VEhT
当我们通过web服务传输大型二进制对象(图像)时,我在实际意义上使用它。因此,当我使用python脚本测试c# web服务时,可以使用一点魔法重新创建二进制对象。
(在python中)
import base64
imageAsBytes = base64.b64decode( dataFromWS )
当需要对二进制数据进行编码时,通常使用Base64编码方案,这些数据需要通过设计用于处理文本数据的媒体存储和传输。这是为了确保数据在传输过程中保持完整而不被修改”(Wiki, 2017)
示例可能如下:您有一个只接受ASCII字符的web服务。你想要保存用户的数据,然后将其传输到其他位置(API),但接收者想要接收未触及的数据。Base64是用来…唯一的缺点是base64编码需要比常规字符串多33%的空间。
另一个示例::uenc = url encoded = aHR0cDovL2xvYy5tYWdlbnRvLmNvbS9hc2ljcy1tZW4tcy1nZWwta2F5YW5vLXhpaS5odG1s = http://loc.querytip.com/asics-men-s-gel-kayano-xii.html。
正如你所看到的,如果我们想把最后一次访问的URL作为参数发送,我们就不能把字符“/”放在URL中,因为我们会打破“MOD重写”- GET参数的属性/值规则。
一个完整的例子是:" http://loc.querytip.com/checkout/cart/add/uenc/http://loc.magento.com/asics-men-s-gel-kayano-xii.html/product/93/ "
推荐文章
- 如何将base64编码的映像保存到磁盘?
- 如何将Base64字符串转换为位图图像,以显示在一个ImageView?
- 用base64编码图像文件
- 如何在iOS上进行base64编码?
- URL方案/主机/路径中的“+”是否代表空格?
- HTML编码问题-显示“”字符而不是“ ”
- 在HTML中,我可以用✓做一个复选标记;. 有相应的x标记吗?
- 有人知道如何解码和编码Base64中的字符串使用Base64吗?
- 在UIImage和Base64字符串之间转换
- 如何检查一个字符串是否被Base64编码
- 如何保存一个PNG图像服务器端,从base64数据URI
- 如何存储自定义对象在NSUserDefaults
- 一个Unicode字符需要多少字节?
- 如何转换字符串和从UTF8字节数组在Java
- 如何确定文本的编码