ASCII码表

来源:互联网 发布:python分析web日志 编辑:程序博客网 时间:2024/06/18 08:57
字符编码

今天老师讲到乱码解决的问题时,听的一头雾水,突然发现自己对字符编码没有很好掌握,再次翻过头来在 复习一遍字符编码。

字符:
java字符使用unicode编码表来表示字符,

ASCII码表:
(American standard code information interchange)美国标准信息交换码,7位表示一个字符,
包含英文字母数字以及常用符号。
ISO8859-1:拉丁码表,8位表示一个字符,最高位补1。不能表示汉字。

gb2312:中文码表,两个字节表示一个字符。
UTF-8:
最多用三个字节表示一个字符,字节最高位以0开头标识用一个字节表示一个字符。
        第一个字节最高位以110开头,第二个字节最高位以10开头标识用两个字节表示一个字符。
第一个字节最高位以1110开头,第二个和第三个字节最高位以10开头,表示用三个字节表示一个字符
UTF-8编码可参考API文档中DataInput接口中关于UTF-8的描述。


编码与解码代码示例:
/*如果编码编错了就没办法解码了(比如,用iso8859-1编码了中文)因为它已经确定了编码没办法改变,如果解码解错了在编一次码在进行正确解码对中国进行ios8859-1编码,它会将中国两个字符每一个字符用一个字节来表示。*/byte[] b1 = "中国".getBytes("iso8859-1");System.out.println("iso8859-1编码:"+Arrays.toString(b1));//对汉字“中国”进行本地字符编码也就是gb2312,每个汉字字符用两个字节表示byte[] bytes = "中国".getBytes();//对默认gb2312编码的字符串进行iso8859-1进行解码,//因为gb2312编码后用四个字节来表示,iso8859-1用一个字节来表示一个字符,解码会表示为四个乱码字符//因为解码不会对二进制数据产生影响,所以现在虽然没有解码成功但是字符的二进制数据还是原来的。String str1 = new String(bytes,"iso8859-1");System.out.println("iso8859-1解码:"+Arrays.toString(bytes)+":"+str1);//对上面解析的四个乱码字符重新进行编码,因为四个字符是由iso8859-1解码得来的所以还会得到原来的字节数组byte[] b2 = str1.getBytes("iso8859-1");System.out.println("iso8859-1编码:"+Arrays.toString(b2));/*将字节数组按照本地编码解码,因为字符编码二进制数据从来没发生改变,所以可以成功解码 * 例如tomcat服务器会将gbk编码默认按照iso8859-1解码,所以可以在进行iso8859-1编码, * 在用本地编码进行解码*/String result = new String(b2);System.out.println(result);
0 0
原创粉丝点击