天天看点

编码解码乱码字符集

编码EnCode:将字符转化为字节

解码DeCode:将字节转化为字符

乱码:打个比方---比较多人知道的联通 用字符集GBK的时候出现这样的情况:��ͨ,这就是乱码

常见的中文字符集有:GBK 和 UTF-8

国际上常用的字符集:Unicode(大字典)、ANSI

UTF-8,中文占三个字节,英文占一个字节(变长),还有定长占两个字节(耗费空间多)

GBK,中文占两个zijie

下面模拟编码:

我的默认的编码字符集为:

编码解码乱码字符集
import java.io.UnsupportedEncodingException;

/**
 * 编码:将字符转化为字节
 * @author Administrator
 *
 */
public class MyEnCode {
	public static void main(String[] args) throws UnsupportedEncodingException {
		String msg = "性命生命使命a";
		
		//默认字符集编码,这里默认为GBK
		byte[] datas = msg.getBytes();
		System.out.println(datas.length);
		
		//使用不同字符集编码,如UTF-8
		datas = msg.getBytes("UTF-8");
		System.out.println(datas.length);
	}
}
           

 结果显示:

13
19
           

说明:不同的字符集得到的字节数是不一样的

下面模拟解码的情况:

import java.io.UnsupportedEncodingException;

/**
 * 编码:将字符转化为字节
 * 解码:将字节转化为字符
 * @author Administrator
 *
 */
public class MyDeCode {
	public static void main(String[] args) throws UnsupportedEncodingException {
		String msg = "性命生命使命a";
		//编码
		byte[] datas = msg.getBytes();
		
		//解码
		msg = new String(datas,0,datas.length,"GBK");
		System.out.println(msg);
		
		//乱码:
		//(1)字节数不够
		msg = new String(datas,0,datas.length-2,"GBK");
		System.out.println(msg);
		
		msg = new String(datas,0,datas.length-1,"GBK");
		System.out.println(msg);
		
		//(2)没有使用和默认一样的字符集
		msg = new String(datas,0,datas.length-1,"UTF-8");
		System.out.println(msg);
	}
}
           

 结果:

性命生命使命a
性命生命使?
性命生命使命
???????????