我经常听到人们谈论“64进制编码”。它的用途是什么?
当前回答
base64是一个二进制到文本的编码方案,以ASCII字符串格式表示二进制数据。Base64被设计用来跨通道传输二进制格式的数据。它接受任何形式的数据并将其转换为纯文本的长字符串。以前我们不能传输大量的数据,如文件,因为它是由2⁸比特字节组成的,但我们的实际网络使用2⁷比特字节。这就是base64编码出现的原因。但是base64到底是什么意思呢?
让我们来理解base64的含义。
base64 = base+64
我们可以调用base64作为基数64的表示。Base64仅使用6位(2 = 64个字符)来确保可打印的数据是人类可读的。但是,如何?我们也可以写base65或base78,但为什么只写64呢?让我们证明一下。 Base64编码包含64个字符来编码任何字符串。 base64包含:
10数值即,0,1,2,3,.....9。
26大写字母,即A,B,C,D,.......Z。
26个小写字母,即a,b,c,d,........z。
两个特殊字符,即+,/。取决于你的操作系统。
base64算法遵循的步骤如下:
count the number of characters in a String. If it is not multiple of 3 pad with special character i.e., = to make it multiple of 3. Encode the string in ASCII format. Now, it will convert the ASCII to binary format 8-bit each. After converting to binary format, it will divide binary data into chunks of 6-bits each. The chunks of 6-bit binary data will now be converted to decimal number format. Using the base64 Index Table, the decimals will be again converted to a string according to the table format. Finally, we will get the encoded version of our input string.
其他回答
这是一种二进制数据的文本编码,其结果文本除了字母、数字和符号“+”、“/”和“=”之外什么都没有。这是一种在专门用于文本数据的媒体上存储/传输二进制数据的方便方法。
但为什么是Base-64?将二进制数据转换为文本的两种替代方法是:
Decimal:将每个字节的十进制值存储为三个数字:045 112 101 037等,其中每个字节由3个字节表示。数据膨胀了三倍。 十六进制:将字节存储为十六进制对:AC 47 0D 1A等,其中每个字节由2个字节表示。数据膨胀了两倍。
Base-64在4个字符中映射3个字节(8 x 3 = 24位),该字符横跨6位(6 x 4 = 24位)。结果看起来像“TWFuIGlzIGRpc3Rpb…”。因此膨胀仅仅是原来的4/3 = 1.3333333倍。
我要在这里描述的Base64的用法有点hack。所以如果你不喜欢黑客,请不要继续。
当我发现MySQL的utf8不支持4字节unicode字符时,我遇到了麻烦,因为它使用了3字节版本的utf8。那么我做了什么来支持完整的4字节unicode MySQL的utf8?base64在存储到数据库时编码字符串,在检索时解码字符串。
由于base64编码和解码非常快,上面的工作非常完美。
你需要注意以下几点:
Base64编码多使用33%的存储空间 存储在数据库中的字符串不是人类可读的(您可以将其作为数据库字符串使用基本加密形式的特性出售)。
对于任何不支持unicode的存储引擎,都可以使用上述方法。
大多数情况下,我看到它被用于在只能处理ascii或简单字符集的上下文中对二进制数据进行编码。
当您有一些想要通过网络传送的二进制数据时,通常不会仅仅以原始格式在网络上传输比特和字节。为什么?因为有些媒体是为文本流而设计的。您永远不会知道——有些协议可能会将二进制数据解释为控制字符(如调制解调器),或者您的二进制数据可能会被搞糟,因为底层协议可能认为您输入了一个特殊的字符组合(如FTP如何转换行结束符)。
为了解决这个问题,人们把二进制数据编码成字符。Base64就是这些编码类型中的一种。
为什么是64年? 因为你通常可以依赖于相同的64个字符出现在许多字符集中,你可以合理地相信你的数据最终会在线路的另一端没有损坏。
它用于将任意二进制数据转换为ASCII文本。
例如,电子邮件附件就是通过这种方式发送的。
推荐文章
- 可能增加的最坏的空间使用量是多少?
- 为什么PHP的json_encode函数转换UTF-8字符串为十六进制实体?
- 我如何确定文件编码在OS X?
- Base64长度计算?
- “\d”在正则表达式中是数字吗?
- 使用Javascript的atob解码base64不能正确解码utf-8字符串
- 尝试将一个非属性列表对象设置为NSUserDefaults
- 如何将base64编码的映像保存到磁盘?
- 如何将Base64字符串转换为位图图像,以显示在一个ImageView?
- 用base64编码图像文件
- 如何在iOS上进行base64编码?
- URL方案/主机/路径中的“+”是否代表空格?
- HTML编码问题-显示“”字符而不是“ ”
- 在HTML中,我可以用✓做一个复选标记;. 有相应的x标记吗?
- 有人知道如何解码和编码Base64中的字符串使用Base64吗?