码表的理解(ASCII,GBK,Unicode,UTF-8等)。

如下任何言论都彻底是我的的理解,若有雷同纯属巧合,若有错误,但愿你们多多指出,共同窗习!谢谢!java

 

笔者是一个理解能力偏慢、稍钻牛角尖的程序员,什么东西都要从最基础理解起,一步一步向上理解,所以讲述时也是这样,讲述的也比较通俗,都是按照我的的理解来说述的,也请你们少安毋躁。程序员

 

在计算机中不管任何数据的传输、存储、持久化,都是以二进制的形式体现的。学习

那么当我存一个字符的时候,计算机须要持久化到硬盘,或者保存在内存中。编码

这个时候保存在内存、硬盘的数据显然也是二进制的。.net

那么当我须要从硬盘、内存中取出这些字符,再显示的时候,为何二进制会变成了字符呢?3d

 

这就是码表存在的意义。code

 

码表其实就是一个字符和其对应的二进制相互映射的一张表。blog

 

这张表中规定了字符和二进制的映射关系。内存

 

计算机存储字符时将字符查询码表,而后存储对应的二进制。get

 

计算机取出字符时将二进制查询码表,而后转换成对应的字符显示。

 

大体能够这样理解。

 

By the way

不一样的码表所容纳的字符映射也是不一样的。

 

在有些码表中一个字符占用1个字节,1个字节能表示的范围是-128到127,总共为256。因此能容纳256个字符映射。

 

而有的码表中一个字符占用2个,甚至3个字节,所以能容纳的字符映射也更多。

 

下面笔者按照本身的理解详细讲述一下不一样的码表。

 

 

常见的码表:

 

ASCII:

美国码表,码表中只有英文大小写字母、数字、美式标点符号等。每一个字符占用1个字节,全部字符映射的二进制都为正数,所以有128个字符映射关系。

GB2312:

兼容ASCII码表,并加入了中文字符,码表中包含英文大小写字母、数字、美式标点符号占一个字节,中文占两个字节,中文映射的二进制都是负数,所以有128× 128 = 16384个字符映射关系。

GBK/GB18030:

兼容GB2312码表,英文大小写字母、数字、美式标点符号,占一个字节。中文占两个字节,第一个字节为负数,第二个字节为正数和负数,由于有128× 256 = 32768个字符映射关系。

Unicode码表:

国际码表,包含各国大多数经常使用字符,没个字符都占2个字节,所以有65536个字符映射关系。Java语言使用的就是Unicode码表。

UTF-8码表:(是Unicode编码表的一种实现形式

一样是国际码表,但英文占一个字节,中文占3个字节。

 

 

实际存储中看看具体的影响:

相关文章
相关标签/搜索