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”的含义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值