java 编码

编码与解码 :

注意:

  1. 我们一般都会让编码与解码使用同样的码表,这样子可以避免出现乱码问题。
  2. 英文在每个码表中都是兼用的。 a = 97
  3. 乱码后控制台显示??,不是说明解码后的内容是??,是控制台没有对应的码表去显示该内容
  4. 编码的时候如果使用了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));
        
    }
}

你可能感兴趣的:(java 编码)