字符集通俗易懂解读

何为字符集?

字符是各种文字、标点符号、图形符号、数字等的统称。字符集那就是无数字符组成到一起形成的那个整体集合了。按照字符集中包含的字符个数、种类不同,肯定又会划分出个各种字符集。如:ascll字符集、gbk字符集、unicode字符集等。字符集中有这么多的字符 ,为了查找起来方便,所以又给字符集中的字符挨个做了一个序号,比如我举个例:从0开始,第一个位置的序号0表示a,第二个位置的序号1表示b 依次递增。这就是字符在字符集中的数字序号。我们的字符需要存储到计算机上,我们知道,计算机可没那么聪明,它只能识别0101这样的二进制,这时候要怎么办呢?对了,你可能已经想到了,前面不是说过了吗,每个字符在字符集中都对应了一个数字序号吗,如果我们存下这个数字,那不就变相的存储了这个字符吗(前提存、取都要用同一个字符集哈,因为不同字符集中,相同数字序号可能代表的字符不一样嘛),数字的二进制我们总是能够知道的。这个将字符变成数字序号的二进制然后存储到计算机中的过程,我们就叫做它字符编码,那解码也一样,二进制变成字符的过程就叫做解码。所以,在字符集中除了记录下每个字符的数字序号(十进制),还同时记录了它的二进制(用于存储到计算机)

1、先有字符,再通过不同的编码集,根据字符,去查找它对应数字序号,然后找出它对应的二进制字节

2、ascll编码:固定用1个字节表示,里面包含了英文中的各种单词和标点符号

3、iso-8859-1:里面除了包含英文的那些字符外,还包含了欧洲其他国家的文字字符

4、gbk:固定2个字节,里面包含了中文汉字和中文字符

5、unicode编码只是一个规范,它包含了世界上所有文字的数字(世界上这么多文字,所以它用16进制的数字来规定每个字符的数字序号,总共用了2个字节(每个字节上的每一位都是一个16进制的数字))。光说unicode编码是没有意义的,通常我们说的unicode编码是指的它的是实现:utf-16

6、utf-8、utf-16、utf-32 都是unicode的具体实现(就像子类是接口的具体实现一样)

utf-8:长度不固定,用1个字节表示unicode中定义的英文字符,通常用3个字节表示unicode中定义的中文字符(所以,它的1个字节不能完全用于表示数字序号,还会规定1个字节中前几位表示当前字符用几个字符表示,后几位才用于表示数据序号。当然我只是为了好理解才这样举例的,实际上没有这么简单)

utf-16:长度不固定(一个字符可能用2个或4个字节表示),用2个字节表示unicode中定义的一部分字符,用4个字符表示unicode中定义的另外一部分字符

utf-32:长度固定,用4个字节表示一个unicode中定义的某个字符

ps:我们都知道Java中用的字符集是unicode字符集,但是确不知道它用的具体是utf-16字符集。之所以我们都说java中一个字符占2个字节,我想大概是因为java中用的字符只属于utf-16用2个字节包含的那一部分字符吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值