您的位置:首页 > 编程语言 > Java开发

Java知识点<10>常见的编码格式

2018-03-10 17:19 381 查看

编码

计算机中存储信息的最小单元是一个字节,即8个bit,所以能表示的字符范围是0~255个
人类要表示的符号太多,无法用一个字节来完全表示
要解决这个矛盾必须要有一个新的数据结构char,从char到byte必须编码。目前常用的编码方式有ASCII、ISO8859-1、GB2312、GBK、UTF-8、UTF-16等

ASCII码

共有128个,用一个字节的低7位表示0~31 控制字符 如换行、回车、删除
32~126 打印字符

ISO8859-1

在ASCII码的基础上涵盖了大多数西欧语言字符,仍然是单字节编码,它总共能表示256个字符

GB2312

全称为《信息交换用汉字编码字符集基本集》,它是双字节编码,总的编码范围是A1~F7A1~A9 ·符号区
B0~F7 汉字区

GBK

全称《汉字内码扩展规范》,扩展了GB2312,加入更多的汉字,它的编码范围是8140~FEFE(去掉XX7F),与GB2312兼容

GB18030

《数字交换用汉字编码字符集》,它可能是单字节、双字节或者四字节编码,与GB2312编码兼容

UTF-16

具体定义了Unicode字符在计算机中的存取方法。采用2字节来表示Unicode转化格式,它是定长的表示方法,不论什么字符都可以用两个字节表示

UTF-8编码规则

UTF-8采用一种变长技术,每个编码区域有不同的字码长度,不同的字符可以由1~6个字节组成。编码规则如下:如果一个字节,最高位为0,表示这是一个ASCII字符(00~7F)
如果一个字节,以11开头,连续的1的个数暗示这个字符的字节数
如110xxxxx代表它是双字节UTF-8字符的首字母如果一个字节,以10开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节
如下:在一个文件中通过UTF-8编码,输入“中国”保存后,通过如下代码读取[java] view plain copyFile f = new File("F:/study/test/test.txt");  
        try {  
            FileInputStream input = new FileInputStream(f);  
            //BufferedReader reader = new BufferedReader(new InputStreamReader(input));  
            int i;  
            while((i=input.read())!=-1){  
                System.out.println(Integer.toBinaryString(i));  
            }  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  

输出如下结果:11100100
10111000
10101101
11100101
10011011
10111101从中可以看出,这两个汉字均占用三个字节存储

字节-字符转变

[java] view plain copyString a = "中国";  
        Charset charset = Charset.forName("UTF-8");  
        ByteBuffer byteBuffer = charset.encode(a);  
        while(byteBuffer.hasRemaining()){  
            byte b = byteBuffer.get();  
            String s = Integer.toBinaryString((b & 0xFF) + 0x100).substring(1);  
            System.out.println(s);  
        }  

如上所示,为byte获取其在内存中存储的二进制形式的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: