java 中文字符 解编码

来源:互联网 发布:2万钱网络大电影 编辑:程序博客网 时间:2024/05/22 08:51

一个实例:

 // 该java类默认为gb2312编码String str="你好abc";System.out.println("原串:"+str);byte[] bytes1=str.getBytes();//byte为8bit,-128到127System.out.print("gb2312:  ");for(byte b:bytes1){System.out.print(Integer.toHexString(b&0xff)+" ");}System.out.println();System.out.print("gbk:     ");byte[] bytes2=str.getBytes("gbk");for(byte b:bytes2){System.out.print(Integer.toHexString(b&0xff)+" ");}System.out.println();System.out.print("utf-8:   ");byte[] bytes3=str.getBytes("utf-8");for(byte b:bytes3){System.out.print(Integer.toHexString(b&0xff)+" ");}System.out.println();System.out.print("utf-16be:");byte[] bytes4=str.getBytes("utf-16be");for(byte b:bytes4){System.out.print(Integer.toHexString(b&0xff)+" ");}System.out.println();System.out.print("ISO-8859-1:");byte[] bytes5=str.getBytes("ISO-8859-1");for(byte b:bytes5){System.out.print(Integer.toHexString(b&0xff)+" ");}System.out.println();String str2=new String(bytes2);System.out.println(str2);String str3=new String(bytes3);System.out.println(str3);String str4=new String(bytes4);System.out.println(str4);String str5=new String(bytes4,"utf-16be");System.out.println(str5);String str6=new String(bytes5,"ISO-8859-1");System.out.println(str6);

  打印结果:

 

  分析:由上面例子可以知道中文“你好”根据各种字符编码标准得到的字节是不同的:

    1)gb2312和gbk相同,两个字节表示一个中文,实际上gb2312只支持6763个汉字,不是所有汉字都可以使用gb2312编码,而gbk是兼容gb2312的,而且可以表示更多的中文字符;

    2)utf-8用3个字节表示一个中文,一个字节表示一个字母;

    3)utf-16be(即Unicode编码)则是中文和英文字符都是2个字节;

    4)ISO-8859-1为单字节编码,范围0x00-0xff,从输出结果可以知道,因为“你”,“好”是中文,在码表中没有中文字符,字节都翻译为了3f,尽管在后面使用了iso-8859-1,翻译编码“3f 3f 61 62 63 ”只得到“??abc”,得不到原来的结果“你好”。ISO-8859-1为很多软件采用的默认编码,故而容易导致中文乱码


参考:点击打开链接


0 0