编码

JAVA程序运行时使用的是unicode编码,unicode编码是模型,其具体表现形式有utf-8,utf-16,utf-32等。

utf-16对普通字符和汉字都是用2个字节。

utf-32每个字符使用的都是3个字节进行编码,是定长的。

utf-8使用的是变长编码,英文字符使用的是一个字节编码,byte的内容和ASCII是相同的。

      中文是3个字节

 base64并不能认为是字符的编码,可以认为是一种加密方式。常常用于对字节进行编码,对3字节编码会形成4字节的结果。BASE64加密简单粗暴。

下面的测试说明:对文件进行读取和写以及string的转换如果不显示的指定字符编码,默认使用的是操作系统的编码

package com.ydd.http;

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.Arrays;  
/**
 * 对文件进行读取和写以及string的转换如果不显示的指定字符编码,默认使用的是操作系统的编码
 * @author yunzhu.ydd
 *
 */
public class CharsetTest {

    public static void main(String[] args) throws UnsupportedEncodingException {
        String oldString="你好!";
        System.out.println(Arrays.toString("你好".getBytes())+"|"+Arrays.toString("你好".getBytes("utf-8"))+"|"+Arrays.toString("你好".getBytes("gbk"))+"|"+Charset.defaultCharset().displayName());
    }

}

运行结果如下(string.getBytes(void)默认是根据操作系统的编码生成byte数组):

[-60, -29, -70, -61]|[-28, -67, -96, -27, -91, -67]|[-60, -29, -70, -61]|GBK

 虽然ISO-8859-1(一个字节)编码格式不能表示中文,但是也能将中文转换成ISO-8859-1格式,只是转换之后会丢数据,是乱码。转换也不会抛异常。

原文地址:https://www.cnblogs.com/YDDMAX/p/5360709.html