电脑只认识字节(0,1),人认识的是字符
编码(encode):从字符到字节
public static void main(String[] args) throws UnsupportedEncodingException {
String msg = "性命生命使命a";
//编码:字节数组
byte[] datas = msg.getBytes();//默认使用工程的字符集
System.out.println(datas.length);//utf-8中,中文3个字节,英文1个字节
//编码:其他字符集
datas = msg.getBytes("UTF-16LE");
System.out.println(datas.length);//utf-16le中,每一个都是两个字节
datas = msg.getBytes("GBK");
System.out.println(datas.length);//中文两个字节,英文一个字节
}
解码(decode):从字节到字符
public static void main(String[] args) throws UnsupportedEncodingException {
String msg = "性命生命使命a";
//编码:字节数组
byte[] datas = msg.getBytes();//默认使用工程的字符集
//解码:字符串
msg = new String(datas,0,datas.length,"utf-8");
System.out.println(msg);
}
字符集:就是一本大字典,里面的编号和字符一一对应
常见的字符集:
乱码问题:解码的时候要知道正确的字符集和字节数,不然可能会导致乱码
1、字节数不够导致的乱码:
2、字符集不统一
public static void main(String[] args) throws UnsupportedEncodingException {
String msg = "性命生命使命a";
//编码:字节数组
byte[] datas = msg.getBytes();//默认使用工程的字符集
//乱码:1、字节数不够
msg = new String(datas,0,datas.length-2,"utf-8");
System.out.println(msg);
msg = new String(datas,0,datas.length-1,"utf-8");
System.out.println(msg);
//乱码:2、字符集不统一
msg = new String(datas,0,datas.length,"GBK");
System.out.println(msg);
}