一、前言

  在前面的解决乱码的一文中,只找到了解决办法,但是没有为什么,说白了,就是对编码还是不是太熟悉,编码问题是一个很简单的问题,计算机从业人员应该也必须弄清楚,基于编码的应用有Base64加密算法,然后,这个问题一直放着,想找个机会解决。于是乎,终于逮到机会,开始下手。

二、编码

  关于ASCII、Unicode编码、UTF-8编码等问题,可以参见笔者另外一篇博客【字符编码】彻底理解字符编码

三、Base64算法

  Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,关于Base64的介绍可以参见这两篇文章base64BASE64算法,下面我们通过Java来实现Base64编码算法并且详细解析其中遇到的问题。

  Base64编码算法的流程图如下:

【字符编码】字符编码 && Base64编码算法

  说明:Base64规则表由Base64的规定的规则得到,而逆向Base64规则表则通过少量的计算获得,如某Base64的编码字符串为QQ==,对于字符Q而言,Q的ASCII编码为81,Base64规则中,16对应Q,则将逆向Base64表中下标为81的项置为16。其余不在Base64中的元素在逆向表中值为-1,逆向表的计算流程如下:

【字符编码】字符编码 && Base64编码算法

四、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() + " ");
        }
    }
}
View Code

相关文章: