编码的理解

人类的文字信息由各种各样的符号构成

文字-----符号

这些符号是不能在磁盘或内存当中存储的,计算机最早是由老美发明出来的,内存和磁盘当中只有 0,1,严格来说内存和磁盘中只能表示整型,那么我们应该怎么表示符号--------编码

一字节8比特位:0~127

编码是值和符号的映射编码关系:

ascll编码表:

1.ASCII中的0~31为控制字符;32~126为打印字符;127为Delete(删除)命令

2.ASCll编码表本质就是英文符号和值的映射关系;

3.(核心符号26(大写)+26(小写)+10(阿拉伯数字))+常见符号,这些还有空余,早期就将这些空余用表情包来编码;

int main()
{
	char buff[] = "apple sort";
	return 0;
}

计算机并不会在底层存储apple和sort这两个单词,而是存对应的编码值:

内存存值,显示符号,打印时访问内存,有很多个字节,拿到第一个字节是97,再拿97去编码里面去查,97映射的符号是a,所以显示对应的符号,所以打印的时候就是查编码表的过程

那我们直接取值:

乱码就是值和表对不上

但是ASCll是适合老美的,编码表是来表示文字的,计算机要继续推广,我们的文化博大精深,汉族就有近10万个,从国际上来,我们需要一个比较统一的编码表:Unicod

统一码(Unicode),也叫万国码、单一码,由统一码联盟开发,是计算机科学领域里的一项业界标准,包括字符集编码方案等;

统一码是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求;

随着发展,又给了许多方案,我们重点关注UTF-8/16/32

UTF-8可以认为还是8个比特位去对应一个符号,但是不一定是8个比特位,有可能是2个8个比特位的组合表示一个符号,是一个变长编码,兼容ASCll(比如中英混合),也就是UTF-8就是以1个字节为单位;

UTF-16就是以2个字节为单位;

UTF-16就是以4个字节为单位;

由兼容性和适用性,UTF-8比较常用 

这也是为什么C++的string要设计成模板(char)(char16_t)(char32_t)

小知识:

GBK:

GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification) ,中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订,国家技术监督局标准化司、电子工业部科技与质量监督司1995年12月15日联合以技监标函1995 229号文件的形式,将它确定为技术规范指导性文件。2000年已被GB18030-2000《信息交换用 汉字编码字符集 基本集的扩充》国家强制标准替代。 [1]2005年GB18030-2005发布,替代了GB18030-2000。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值