`

java学习笔记:字符的编码与解码练习

    博客分类:
  • java
阅读更多

编码:字符串转成字符数组

解码:字节数组转成字符串

 

String类中的字段,charsetName:编码字符集
String -> byte[]     Str.getBytes(charsetName)
byte[] -> String     new String(byte[] b,charsetName)  
 

我们用UTF-8将"你"编码后,返回的字节数值是-28, -67, -96,
十进制:-28  二进制是:11100100   十六进制:E4   对应无符号整数:228
           -67                10111101                BD                         189
           -96                10100000                A0                         160
      
"你"的UTF-8码是 E4 BD A0  
"浣"的GBK  码是  E4 BD
最后的A0 解码后是"?",是不可识别的字符

所以如果我们将字符"你"使用UTF-8编码,用默认的GBK解码,打印的是字符"浣?"

 

 

[示例]:字符编码解码练习

 

import java.util.*;
class Demo            
{
  public static void main(String[] args) throws Exception
  {
    String str = "你";
    byte[] b1 =str.getBytes("UTF-8");  //编码
    String sopStr =Arrays.toString(b1);//返回指定数组内容的字符串表示形式
    sop(sopStr); //[-28, -67, -96]
        
    String s1 = new String(b1);   //解码,使用平台的默认字符集解码指定的 byte 数组
    sop("s1:"+s1);                      //"浣" , 由于默认是GBK解码,所以打印"浣"
    
    String s2 = new String(b1,"UTF-8");
    sop("s2:"+s2);                      //"你"  ,UTF-8解码打印"你"
    
    //如果我们将"你"解码错了,本来要使用UTF-8解码,误用"iso8859-1"解码了
    //由于西欧字符集与中文系统不兼容,我们用"iso8859-1"解码出来的是乱码
    String  errStr = new String(b1,"iso8859-1");  
    sop("errStr:"+errStr); //"???",  解码错误,乱码
    
    byte[] bErr = errStr.getBytes("iso8859-1"); //返炉重编
    sop(new String(bErr,"UTF-8"));//"你",解码成功
    
//注意:这种方法不适合于相同的字符体系
//因为当用GBK解码UTF-8没找到字符时,它会到备用字符集中区找,返回的字符是走样的
//不是原来的"你"的值了,用getBytes方法重新编码只会得到乱码    
  }
    
  public static void sop(Object obj) //打印
  {
    System.out.println(obj);
  }
}

 

0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics