编码:将字符或者其他符号编成计算机可以计算处理的二进制0、1数字。
解码:将一系列二进制0、1数字解码成字符或者其他符号(编码的逆向过程)。
测试代码如下:
package com.qfedu.test;
import java.util.Arrays;
public class Test6 {
public static void main(String[] args) throws Exception {
demo1();
System.out.println("--------------------");
demo2();
System.out.println("--------------------");
demo3();
}
/**
* 测试utf-8编码,使用gbk或者iso-8859-1解码在编码,能否再使用utf-8解码回去
* @throws Exception
*/
public static void demo1() throws Exception {
String s = "哈哈";
byte[] utf8 = s.getBytes("UTF-8"); // 使用utf-8编码
String s1 = new String(utf8, "GBK"); // 使用gbk解码
String s2 = new String(utf8, "ISO-8859-1"); // 使用ISO-8859-1解码
System.out.println(new String(s1.getBytes("GBK"), "UTF-8")); // 哈哈
System.out.println(new String(s2.getBytes("ISO-8859-1"), "UTF-8")); // 哈哈
System.out.println("经测试,经过utf-8编码的能通过gbk和iso-8859-1解码再编回去");
}
/**
* 测试gbk编码,使用utf-8或者iso-8859-1解码再编码,能否再使用gbk解码回去
*/
public static void demo2() throws Exception {
String s = "吃饭";
byte[] gbk = s.getBytes("GBK"); // 使用gbk编码
String s1 = new String(gbk, "UTF-8"); // 使用utf-8解码
String s2 = new String(gbk, "ISO-8859-1"); // 使用ISO-8859-1解码
System.out.println(new String(s1.getBytes("UTF-8"), "GBK")); // 锟皆凤拷
System.out.println(new String(s2.getBytes("ISO-8859-1"), "GBK")); // 吃饭
System.out.println("经测试,经过gbk编码只能通过iso-8859-1解码编回去");
}
/**
* 测试iso-8859-1编码,使用utf-8或者gbk解码再编码,能否再使用iso-8859-1解码回去
* @throws Exception
*/
public static void demo3() throws Exception {
String s = "西红柿炒鸡蛋";
byte[] iso = s.getBytes("ISO-8859-1"); // 使用ISO-8859-1编码
System.out.println(Arrays.toString(iso));
String s1 = new String(iso, "UTF-8"); // 使用UTF-8解码
String s2 = new String(iso, "GBK"); // 使用GBK解码
System.out.println(new String(s1.getBytes("UTF-8"), "ISO-8859-1"));
System.out.println(new String(s2.getBytes("GBK"), "ISO-8859-1"));
System.out.println("经测试,ISO-8859-1编码不能使用UTF-8或GBK解码编回去");
}
}
运行结果如下:
哈哈
哈哈
经测试,经过utf-8编码的能通过gbk和iso-8859-1解码再编回去
--------------------
锟皆凤拷
吃饭
经测试,经过gbk编码只能通过iso-8859-1解码编回去
--------------------
[63, 63, 63, 63, 63, 63]
??????
??????
经测试,ISO-8859-1编码不能使用UTF-8或GBK解码编回去
总结:utf-8编码的可以通过gbk或者iso-8859-1解码再编回去
gbk编码的只能通过iso-8859-1解码再编回去