字符编码简单说明

前言

这里的字符指所有文字(汉字英文日文等)、数字、符号(中英等符号、数学符号等)
首先数据都是存储在介质(比如磁盘)上的,然后数据存储的形式都是字节形式。
字节是8比特数据,就是有八位二进制的01序列组合。所有数据都是以01010111这种01序列保存的。
你肯定是在想,只用01就能保存我们看到的所有文字、符号好神奇啊。
其实很简单,就是一一对应的关系。
让我们从设计这的角度考虑问题,假如要让计算机显示字符,那么方案就是,我先把所有要显示的字符都预定义了,然后做一张字节和这些预定义字符的对应表,传输的时候,你给我字节,我去查看我对应表里面这个字节对应哪个字符,然后我就把对应的字符显示出来。
举个例子,我传递一个字节0100 0001给计算机,计算机查看0100 0001对应ASCII码表中的控制图形是A。然后显示A。
就是这么简单。编码表,其实也就是一个字节与预定义字符的对应表。

编码表简单介绍

ASCII编码表

首先是ASCII表,这是第一张编码表。人家美国觉得自己2大小写字母56个,再加上数字0到9共66个,然后再加一些符号啥的觉得用一个字节就行了,一个字节8位二进制,有256种组合,可以满足我所有的需求,然后就去用了。

GB2312编码表

后来计算机发展,所有国家都要用计算机了,我们也要在计算机上显示我们的文字,比如我们国家。说我们也要显示自己的语言文字标点符号,但是一个字节也就是256种组合不够啊我们汉字这个多,那就两个字节65 536种组合吧,前256个组合还是原来的ASCII表的内容,把这些汉字等字符录入进中文系统去了,有了自己的对应表GB2312编码表。

BIG5编码表

然后台湾说我们用繁体啊,我们也要显示啊,就有了它们自己的编码表。

Unicode编码表

这几个编码表的对应情况都不一样(大多兼容ASCII表),然后国际组织看不下去了,说你们这样太混乱了,这么多编码表,自己倒是爽了但是一点也不international,我们考察了全世界所有的文字图形符号,全部录入进去了,我们每个字符用三个字符表示,共16 777 216种组合,命名为Unicode,全部用我的把。这样世界就通用了。

UTF8编码表

其它国家说好是好,但是我们原先保存一个字符用两个字节就行了,用你的编码表一个字符变成了三个字节,这样的话我们保存本来1G的数据现在要用1.5G的空间,太浪费了。
UTF8是对Unicode编码表的再编码,对不同范围的字符使用不同长度的编码,前面256组合与ASCII表一致使用一个字节表示,汉字等使用三个字节表示。主要再使用中文的国家流行。

编码可以指定

字符编码就是一个编码表,就是指定你使用什么编码表保存数据,读取数据。
比如,我要创建一个数据库,创建的时候就要为数据库指定编码,就是数据保存时候使用哪个码表。
再比如我有一个utf8编码的txt文档,但是我以GB2312编码打开,就会乱码,这是因为我磁盘上的01序列你读取的时候没有按照保存时用的码表读取,对应关系都错了自然不能正确显示字符。
再比如我有个UTF8编码的网页,我再浏览器种设置网页编码方式为GB2312,就乱码了。

请注意,虽然视音频也是字节保存,但是不和字符一样,这也是视音频文件也可以用记事本打开原因(虽然是乱码)

总结

1、数据保存再磁盘上的形式?
字节形式保存。一个字节是8比特即8位二进制。
2、为什么出现编码表?
为了显示文字符号,需要有让字节与要显示的预定义文字符号一一对应的对应表,即编码表。世界上各个地区出于对保存数据的容量等的考虑,使用不同的编码表。

猜你喜欢

转载自blog.csdn.net/qq_34720759/article/details/78947586
今日推荐