程序中的编码常识

程序中的编码问题

       相信很多小伙伴在开始学编程的时候就很奇怪一个问题,什么时候是ASCII编码,什么时候是Unicode码,什么时候是UTF-8编码…这些问题大多时候很多人可能都囫囵吞枣,不求甚解,不多说了,我也是这样,所以为了方便更多的小伙伴了解这个问题,我整理了一下程序中的编码知识。

参考链接:字符与编码

编码发展史

       在计算机发展之初,美国作为计算机发源地,制定了美国信息交换标准代码,也就是我们日常所说 的ASCII码(American Standard Code for Information Interchange),其中根据拉丁字母(拉丁字母(也称为罗马字母)是多数欧洲语言采用的字母系统,是世界上最通行的字母文字系统。)制定了一套标准,其中包含了有128个字符。
       可是随着计算机的发展,世界上其他很多国家也需要将自己的文字系统加入到计算机系统中,想一想,如果不将汉字加入进去,我们能够传输我们的中文信息吗?于是我们国家也制定了一套自己的编码系统:(来自维基百科GB2312

GB 2312 或 GB 2312–80 是中华人民共和国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,通常简称GB,又称GB0,由中国国家标准总局发布,1981年5月1日实施。GB 2312编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。

这个和GBK是啥关系啊?

       在我们国家制定了GB 2312编码后,后面有逐渐增加了一些字符,所以有了GBK(汉字内码扩展规范,其中K就是中文意思中的扩展之意),其后又为了扩大,制定了GB18030编码规范。
China Encode
       同样的道理,其他国家也肯定制定了自己的编码规则,例如日本的Shift_JIS,韩国的Euc-kr等等,所以为了规避在网络世界里大家各自为政,不便交流的问题,所以产生了Unicode编码(百度百科):

Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

       但是Unicode编码中规定了通常都是2个字节,生僻字占4个字节。要知道的是ASCII码中每个字符都是只占1个字节啊,这样就导致了一个问题是:我们都是用英文字符(通俗的说法)来写的代码,这样的话Unicode编码可就比ASCII码至少多了一倍的传输量,这样很不利于资源的节约,所以在此基础上UTF-8编码应运而生(维基百科):

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部分修改,即可继续使用。因此,它逐渐成为邮箱、网页及其他存储或发送文字的应用中,优先采用的编码。

       UTF-8采用了16个字节来存贮字符,其中字母1个字节,汉字3个字节,生僻字4到6个字节。

总结图:

编码总结

用处呢?

现在计算机系统通用的字符编码工作方式:

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

       用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:
在这里插入图片描述

       浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器:
在这里插入图片描述

       所以现在知道为什么我们网页传输的时候通常都会看见utf-8了吧:
Google

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值