编码与解码 :
注意:
- 我们一般都会让编码与解码使用同样的码表,这样子可以避免出现乱码问题。
- 英文在每个码表中都是兼用的。 a = 97
- 乱码后控制台显示??,不是说明解码后的内容是??,是控制台没有对应的码表去显示该内容
- 编码的时候如果使用了unicode码表, 那么默认就会使用utf-16码表
public class Demo2 {
public static void main(String[] args) throws UnsupportedEncodingException {
String str = "中国";
//编码 看得懂->看不懂 (如:字符串->字节)
byte[] buf = str.getBytes(); // gbk
System.out.println("gbk码表编码值:"+ Arrays.toString(buf)); // [-42, -48, -71, -6]
buf = str.getBytes("utf8"); //使用utf-8码表进行编码
System.out.println("utf-8码表编码值:"+ Arrays.toString(buf)); // 【-28, -72, -83, -27, -101, -67】
//解码过程 看不懂->看得懂 (如:字节数组->字符串)
String result = new String(buf,"utf-8"); //gbk
System.out.println("解码的结果:"+result);
//需求:还原"中国"
String2 = "中国";
buf = str2.getBytes("iso8859-1");//使用iso8859-1编码得到字节[63,63]
str2 = new String(buf,"gbk");//使用gbk解码得到??
//->还原
buf = str2.getBytes("gbk");//先用gbk编码得到字节
Str2 = nwe String (buf,"iso8859-1");//再使用iso8859-1解码得到原文
System.out.println(str2);
// -2, -1, 是utf-16的标识位。
String str3 = "州a广"; // [-2, -1, 93, -34, 0, 97, 94, 127]
byte[] buf2 = str3.getBytes("unicode");
System.out.println("字节数组:"+ Arrays.toString(buf2));
}
}