编码表概述

编码表概述

在计算机中无论任何数据的传输、存储、持久化,都是以二进制的形式体现的。
那么当我存一个字符的时候,计算机需要持久化到硬盘,或者保存在内存中。
这个时候保存在内存、硬盘的数据显然也是二进制的。
那么当我需要从硬盘、内存中取出这些字符,再显示的时候,为什么二进制会变成了字符呢?

这就是码表存在的意义。

码表其实就是一个字符和其对应的二进制相互映射的一张表。
这张表中规定了字符和二进制的映射关系。

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

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

可以这样理解。

在有些码表中一个字符占用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码表。
    * Java中的char类型用的就是这个码表。char c = 'a';占两个字节。

UTF-8码表:
    * 是基于Unicode码表的,但更智能,会根据字符的内容选择使用多个字节存储。英文占一个字节,中文占3个字节。

乱码的原因

* 因为文本在存储时使用的码表和读取时使用的码表不一致造成的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值