字符编码的概念:学习笔记

引入

字符编码简明的可以这样去描述,假设有一种英语:该英语只使用26个英文字母字符,不在包含其他任何字符,那么我们可以为这种英语制作一种编码表,可以使用0-25去分别映射这26个字母,如下图:
在这里插入图片描述
应该注意的是,我们还有其他的编码方式,如使用1-26去分别映射这26个字母也行。

字符编码中最著名的该书ASCII标准编码,该编码定义了128个字符,足够满足美国地区的使用需求。其他字符一些与英语类似的地区以ASCII标准编码为模板制作了ASCII扩展编码或ASCII扩展编码的变种以满足自己地区的使用需求。

中国基本字符很多,采用多字节编码,常用的有GB2312和GBK编码。

为了满足国际化的需求,UNICODE统一编码标准被提出,在该编码标准中,世界上所有已知的字符都被统一映射到一个表中(该表是相对固定的),UTF-8和UTF-16是该标准的两种实现。

本文重点描述

本文重点描述ASCII标准编码,并简单的提到扩展ASCII编码、GBK、UNICODE(UTF-8 & UTF-16)几种编码,目的在于记录自己的对编码概念的认知。

ASCII标准编码

ASCII标准编码用7个二进制位去编码一个信息,最多可编码128个信息,在ASCII标准编码中这128个信息被完全使用,下面是对着128个信息的描述(可对比ASCII码表阅读):
在这里插入图片描述

  • 0~31及127是控制字符或通信字符

    - 控制字符如:

LF:换行
CR:回车
FF:换页
DEL:删除
BS:退格
DEL:响铃

    - 通信字符如:

SOH:文头
EOT:文尾
ACK:确认
  • 32到125是字符

    - 其中32为空格
    - 48~57为0-9十个阿拉伯数字
    - 65~90为26个英文大写字母
    - 97~122为26个英文小写字母

  • 此外还包括一些特殊符号,如 $ ^ & * # 等

ASCII标准编码的实现

ASCII标准编码的实现采用一个字节储存一个信息,ASCII标准编码中,没一位信息仅需要7个二进制位就能完成,用一个字节去存储,将最高位设置为0。

ASCII标准编码是一种单字节编码方案。

应该注意一点,这里的说道标准和实现,标准仅仅定义了一种映射(具体如码表,编码32对应了空格),实现则是在计算机上的标准体现,标准和实现这个概念在UNICODE标准的UTD-8实现和UTF-16实现处更加的分明。

ASCII扩展编码

ASCII扩展编码是用8个二进制位去编码一个信息,最多可编码256个信息,其中0-127对应了ASCII标准编码的0-127位,128-256则用于编码更多信息。

在实现上,采用一个字节去存储一个信息。

GB2312编码

GB2312编码基本集共收入汉字6763个和非汉字图形字符682个,类比于ASCII标准编码标准,这是一种逻辑上的映射。

在实现上,GB2312采用两个字节去编码信息。

GBK编码

…跳过…

UNICODE标准编码方案

在该UNICODE标准编码方案中,世界上所有已知的字符都被统一映射到一个表中,这与所有编码方案一致。

存储的信息量的大小始终是与花费的代价成正比,在实现上最简单粗暴的方案无疑是UTF-32,这种实现方式存储每个信息都需要32位,想想在ASCII实现上进行8位就能存储一个信息,而在GB2312实现方案中也仅仅需要16位,对存储的极不友好造成了这种编码变不流行。

UTF-8 与 UTF-16实现

在UTF-8中,采用特殊的技巧(不再赘述),使得对于一部分字符仅用8位去存储,对于另一部分字符用16位去存储,对于再另一部分字符用24位去存储,这相比于UTF-32而言对存储的改进是极大的。

而在UTF-16中,同样采取一些特殊的技巧,使得对于一部分字符仅用16位去储存,而对于另一部分字符采用32位去存储,这看起来和UTF32有点像,也很浪费,但想想16位已经能将绝大部分常用的字符囊括了,就不会再有这样的观点了。

UTF-8比UTF-16更节省空间,常用于网络传输,但其解析较为UTF-16困难,在windows操作系统底层实现上,采用的默认字符集为UTF-16实现。

一点骚话

学习UTF-8和UTF-16这两玩意时,看到一句话,UTF-8和UTF-16都是根据需要而产生的,这两者现在谁也替代不了谁,不搞清楚一些细节的地方,就很不容易理解一些本质的东西。另外在验证的时候还碰到一个叫大段存储和小端存储的概念,看到说,这玩意是计算机发展中的历史遗留,更深入的细节没有去理会,但心里:MMP,好累。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值