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流—— 字符集的主要内容,如果未能解决你的问题,请参考以下文章