一、基本概念
1. 比特位(Bit)
是计算机最小的存储单位
以0或1来表示比特位的值
2. 字节(Byte)
是计算机中数据存储的基本单元
一字节等于一个8个比特位
3. 字符(Character)
是一个信息单位
是各种文字和符号的统称
4. 字符集(Character Set)
是某个范围内字符的集合
不同的字符集规定了不同字符的个数
5. 字符码(Code Point)
字符集中每个字符的数字编号
6. 字符编码(Character Encoding)
是将字符集中的字符码映射为字节流的一种具体实现方案
ASCII 编码、UTF-8 编码、GBK 编码
7. 编码(Encoding)
编码的过程是将字符转换成字节流
8. 解码 (Decoding)
解码的过程是将字节流解析为字符
二、具体解释
1. 我们想做的事情,最终的目的?
- 将文本内容存储到存储器当中
- 从存储器中取出来文本内容进行相关操作
最终目的.png
2. 存储器的能接受的存储方式?
- 你现在要把文本内容存储在存储器里面;所以你能不考虑它的感受?
- 举个例子 --- 商场的储物柜
商场的储物柜.png
储物柜组成:一个大箱子有很多小柜子;一个小柜子里面有几个小格子;
(1) 请问:你租柜子的时候,能租一个格子吗?不能,只能租一个柜子;对不对?所以一个柜子就是一个“基本存储单元”;
(2) 请问:小柜子里面真正放东西的时候,是不是放在小格子里面?所以,一个小格子,就是 “最小存储单位”; - 类比到存储器的存储结构,如下:
存储器的存储结构.png
- 举个例子 --- 商场的储物柜
3. 存储目的的抽象
-
我们的最终目的
最终目的.png
-
抽象后的图示
把一个个字符,存储到存储器.png
存储的过程称为 “编码”
取出的过程称为 “解码”
4. 引发的问题?
-
如何存储字符?(字符都是一些a,b,c,1, 2, 3等等; 存储器只能存储0和1)
引发的问题及答案.png
-
按照怎样的规范进行存储?(每个字符占用多少字节?)
按照怎样的规范进行存储.png
5. 解决方案(统一的标准:编码解码规范)
- 由具体的编码,来确定每一个字符所对应的数值;让存储器直接存储数值就可以;到时候,解码的时候;取出对应的数据,再按照编码规范找到对应的字符即可
解决方案.png
6. 乱码的原因?
- 存字符“a”的时候,按照编码1,转换的数值是97;
- 下次从存储器取出来数值97之后,居然按照编码2,进行解码;
- 而编码2里面的97,有可能对应的是s;
- 这样就造成“乱码”;(如上图)
所以,避免乱码的方式就是;保证编码和解码使用的是同一套字符编码;
7. 既然乱码是由使用了不同的字符编码引起的;那为什么搞这么多套?合成一套,弄一个标准不就可以了?
言之有理,但凡事都是一个发展进化的过程;
而且,“大而全”不一定好;拖拉机拉货特别多;你能开着去上班吗?
- 细看“字符编码”发展历程
- 计算机最早发明于美国, 英语中主要就包括26个字母(大小写), 10个数字, 标点符号, 控制符等等; 所以, 最终就制定了ASCII字符编码, 映射了字符和字符码的关系, 并使用一个字节的后七位(0 - 127)来存储; (当时真TM没想到, 计算机会普及)
- 慢慢计算机普及到西欧其他地区, 发现好多字符没法识别处理; 于是对ASCII进行了扩展, 叫 EASCII编码; 还是一个字节, 从128 – 255; 但是针对于这一块的扩充, 各个厂家各有自己的标准(比如当时比较有名的CP437); 最后导致互相之间没法沟通; � 所以, 后来, 由国际标准化组织(ISO) 以及国际电工委员会(IEC)联合制定了一个标准 ISO/8859-1(Latin-1), 继承了CP437的128-159; 重新定义了160-255;
- 然后到中国之后, 全都懵逼了; 汉字博大精深, 一个字节肯定不够; so, 国人自己搞了一个GB2312来存储中文, 6763个汉字;(双字节, 兼容ASCII)� 可是, 一开始还很爽; 后来发现还有繁体字, 藏文, 蒙文, 维吾尔文… 懵逼X2; 于是一狠心, 搞了一个GBK, 全给他们搞进来;
- 中国是搞定了, 那日本,韩国… … 如果到时候, 各有各的字符编码, 那该怎样沟通?比如 666 , 在中国代表NB; 在岛国代表SB, 那就乱套了;� 所以, 统一联盟国际组织, 提出了Unicode编码; 涵盖了世界上所有的文字, 每一个字符都有对应的唯一一个字符码, 这回大家都开心了� 但是, 针对于每个字符码, 使用几个字节存储的问题, 又存在几个不同的具体解决方案; 比如utf-8, utf-16, utf-32… 所以, 其实, 我们讨论这边编码的时候, 都是指Unicode编码
- 获取更多资源,请关注微信公众号“百川一页”;
百川一页
- 或加入QQ群:635040761(请注明来源)
Python进化群二维码.png
网友评论