javaSE I/O流—— 字符集

Posted 玛丽莲茼蒿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaSE I/O流—— 字符集相关的知识,希望对你有一定的参考价值。

        计算机一开始在美国流行起来,ASCII编码完全够用,后来推广到欧洲、全世界。出现了欧洲用的ISO编码,中国用的GBK编码。

        这时候有一个问题,如果一个文档由美国人、欧洲人、中国人共同编辑,那么我们无论使用ASCII、ISO、GBK哪种编码方式,都会有部分乱码(比如使用GBK,那么只有中文是正常的,其他人写的都是乱码)。

        所以出现了Unicode,想要把全世界的字符统一起来,形成一个“大表”。Unicode规定除了兼容ASCII用一个字节之外,所有字符都由两个字节表示,这显然是不够的。和计算机网络的ISO参考模型一样,并没有被市场采用。

        取而代之的是utf-8,算是Unicode的一种实现。

        那utf-8,utf-16里面的“8”和“16”代表什么意思呢?

        我们知道,utf是一种变长的编码方式,可以用1个字节、2个字节、3个字节甚至4个、6个字节表示1个字符。那么,现在内存中有一串二进制编码

0110 0111 1010 1000 0011 1111 0001 1011 

        那到底是哪几个字节表示一个字符呢?这就需要做一个标记。

        以utf-8为例,它的标记是这样做的:

         

         也就是说要每隔“8”位去读前面的标记,这是utf-8中“8”的含义。同样地,utf-16就需要在每“16”位的开头做标记,这就是“16”的含义。

以上是关于javaSE I/O流—— 字符集的主要内容,如果未能解决你的问题,请参考以下文章

javaSE I/O流—— 各种各样的流

JavaSE入门学习45:文件传输基础之I/O流

JavaSE入门学习44:文件传输基础之I/O流

JavaSE入门学习43:文件传输基础之I/O流

javaSE I/O流—— 各种各样的流

JavaSE——IO流(字节流&字符流)