一、前言
在前面的解决乱码的一文中,只找到了解决办法,但是没有为什么,说白了,就是对编码还是不是太熟悉,编码问题是一个很简单的问题,计算机从业人员应该也必须弄清楚,基于编码的应用有Base64加密算法,然后,这个问题一直放着,想找个机会解决。于是乎,终于逮到机会,开始下手。
二、编码
关于ASCII、Unicode编码、UTF-8编码等问题,可以参见笔者另外一篇博客【字符编码】彻底理解字符编码。
三、Base64算法
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,关于Base64的介绍可以参见这两篇文章base64,BASE64算法,下面我们通过Java来实现Base64编码算法并且详细解析其中遇到的问题。
Base64编码算法的流程图如下:
说明:Base64规则表由Base64的规定的规则得到,而逆向Base64规则表则通过少量的计算获得,如某Base64的编码字符串为QQ==,对于字符Q而言,Q的ASCII编码为81,Base64规则中,16对应Q,则将逆向Base64表中下标为81的项置为16。其余不在Base64中的元素在逆向表中值为-1,逆向表的计算流程如下:
四、Base64算法的Java实现
Java中的字符都是以Unicode格式进行存储的,如何查看任一个字符在Java中的表示?使用如下代码即可
import java.io.UnsupportedEncodingException; public class Test { public static void main(String[] args) throws UnsupportedEncodingException { String str = "张"; byte[] bytes = str.getBytes("utf-8"); for (int i = 0; i < bytes.length; i++) { System.out.print(Integer.toHexString(bytes[i] & 0xff).toUpperCase() + " "); } } }