字符集和编码

位和字节

位和字节对程序员而言应该是无需赘述的概念,如果你是程序员出身,且对这两个概念不甚了解的话就需要反思了。

位:数据存储的最小单位。在计算机中的二进制数系统中,位,简记为b,也称为比特,每个0或1就是一个位(bit)。计算机中的CPU位数指的是CPU一次能处理的最大位数。

通俗地说,位就是指一个二极管的状态0/1(开/关)。

字节:字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。最常用的字节是八位的字节,即它包含八位的二进制数。

位和字节的关系可以理解为,英语是由26个字母组成,但是讲话时,却是用多个单词拼成的句子。单个字母并无实际意义(某些特例除外)。

字符

字符是指能够表达含义的不可分割的最小单位。字符包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。

字符集

顾名思义,字符集就是指字符的集合。不同的人群或不同的场景需要不同字符集,因此当下有很多种
字符集。字符集中所有字符是按照指定书序进行排列的常见的字符集有:ASCII 、GB2312 GBK、BIG5、Unicode
其中Unicode 又称为万国码,旨在收集全球所有的字符,为每个字符分配唯一的字符编号。

Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。目前的Unicode字符分为17组编排,0x0000 至 0x10FFFF,每组称为平面(Plane),而每平面拥有65536个码位,共1114112个。然而目前只用了少数平面。

字符编码

计算机中各种数据都是以二进制存储的,既然字已经有字符集了并且字符集是有顺序的,那在存储字符时直接使用字符的位置序号不就可以了吗?可以解决问题,但不是最佳解决方案。如果直接使用位置序号,会带来极大空间的浪费。比如讲英文的国家,通常只需要用到位于Unicode字符集靠前部分的字母(前128位,即ASCII字符集中字符),即一个字节就能表达出其位置,但存储时却需要三个字节来存储(高位补0)。

高位补0的原因是:比如两个单字节的字符连在一起时,无法区分是一个双子节字符还是两个单字节字符。

字符编码存在的意义是,通过一定的规则,用尽可能少的字节表示字符在字符集中的位置(建立映射关系)。因此字符集必须和编码方式搭配使用。Unicode常见的编码方式有:UTF-16 、UTF-8 、UTF-32。
有些字符集既是字符集也是字符编码,比如GBK

打开txt时,文字是如何被打印到屏幕上的?

  1. 文本程序以流的方式将文件读取到内存中
  2. 在对流进行解析时,会指定编码格式,比如UTF-8
  3. 通过UTF-8编码后,就可以获知该字符在字符集中(Unicode)的位置序号
  4. 通过位置序号转化位对应的字符,并加以展示。

如果文件本身不是通过UTF-8编码的,在读取时以UTF-8编码,就会导致解码失败,从而出现乱码。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值