package cn.io;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
public class EncodeDecode {
public static void main(String[] args) throws IOException {
String msg1 = "我爱你";
String msg2 = "ILOVEYOU";
// ENCODE
// 默认使用工程的字符集GBK
byte[] datas1 = msg1.getBytes();
byte[] datas2 = msg2.getBytes();
System.out.println("GBK每个汉字" + datas1.length / 3 + "字节&&英文数字" + datas2.length / 8 + "字节");
// DECODE
msg1 = new String(datas1, 0, datas1.length, "GBK");
msg2 = new String(datas2, 0, datas2.length, "GBK");
System.out.println(msg1 + msg2);
// 使用其他字符集编码
// UTF-16LE
datas1 = msg1.getBytes("UTF-16LE");
datas2 = msg2.getBytes("UTF-16LE");
System.out.println("UTF-16LE每个汉字" + datas1.length / 3 + "字节&&英文数字" + datas2.length / 8 + "字节");
// DECODE
msg1 = new String(datas1, 0, datas1.length, "UTF-16LE");
msg2 = new String(datas2, 0, datas2.length, "UTF-16LE");
System.out.println(msg1 + msg2);
// UTF8
datas1 = msg1.getBytes("UTF8");
datas2 = msg2.getBytes("UTF8");
System.out.println("UTF8每个汉字" + datas1.length / 3 + "字节&&英文数字" + datas2.length / 8 + "字节");
// DECODE
msg1 = new String(datas1, 0, datas1.length, "UTF8");
msg2 = new String(datas2, 0, datas2.length, "UTF8");
System.out.println(msg1 + msg2);
// ISO-8859-1 (解码中文有问题)
datas1 = msg1.getBytes("ISO-8859-1");
datas2 = msg2.getBytes("ISO-8859-1");
System.out.println("ISO-8859-1每个汉字" + datas1.length / 3 + "字节&&英文数字" + datas2.length / 8 + "字节");
// DECODE
msg1 = new String(datas1, 0, datas1.length, "ISO-8859-1");
msg2 = new String(datas2, 0, datas2.length, "ISO-8859-1");
System.out.println(msg1 + msg2);
// Unicode(解码中文有问题)
datas1 = msg1.getBytes("Unicode");
datas2 = msg2.getBytes("Unicode");
System.out.println("Unicode每个汉字" + datas1.length / 3 + "字节&&英文数字" + datas2.length / 8 + "字节");
// DECODE
msg1 = new String(datas1, 0, datas1.length, "Unicode");
msg2 = new String(datas2, 0, datas2.length, "Unicode");
System.out.println(msg1 + msg2);
// ASCII(解码中文有问题)
datas1 = msg1.getBytes("ASCII");
datas2 = msg2.getBytes("ASCII");
System.out.println("ASCII每个汉字" + datas1.length / 3 + "字节&&英文数字" + datas2.length / 8 + "字节");
// DECODE
msg1 = new String(datas1, 0, datas1.length, "ASCII");
msg2 = new String(datas2, 0, datas2.length, "ASCII");
System.out.println(msg1 + msg2);
// 乱码的情况
// 1.字节数不够
// 2.字符集不统一
}
}
控制台输出
以下3种字符集不支持汉字
备注
//字符串转字节数组
byte[] datas1 = msg1.getBytes();
//字节数组转字符串
msg1 = new String(datas1, 0, datas1.length, "GBK");