原文链接:https://zhuanlan.zhihu.com/p/258345888
感谢原作者的分享~本博客仅仅是为了做笔记

计算机是美国人发明的, 早期在处理文字方面, 美国人很自然地只考虑处理英语世界的文字.

现在我们知道, 计算机一次性至少处理8位二进制数, 称为一个字节. 现在所说的16位CPU, 32位CPU, 64位CPU都是以8为基数按照倍数进行扩展的.

对于一个字节来说, 不考虑负数, 8位二进制数转换为十进制数相当于0至255, 总共256个数字. 但对于英文来说, 当年的美国工程师认为26个大小写字母, 加上数字, 标点符号, 空格, 特殊的控制字符等, 也不过127个以内, 严格来说只需要7位二进制数就可以完全覆盖. 所以, 对于用8位二进制数处理英文, 最高位永远是0, 取值范围是从00000000到01111111. 这就是ACSII编码/字符集.

随着计算机在全世界广泛应用, 如何处理当地语言文字称为头一号问题. 80年代, 中国大陆的国家标准总局根据ACSII进行了扩充, 用于处理简体中文. 这个标准叫做GB2312.

GB2312对ACSII的扩充方法很简单. 由于ACSII的最高位永远是0, 那么最高位是1的就表示扩展码, 当程序读到文本的最高位是1时就把下一个字节组合在一起表示一个字符. 因此, GB2312完全兼容ACSII编码, 英文字母和半角标点符号等用一个字节表示, 而ACSII以外的字符, 如汉字, 全角标点符号, 则统一使用两个字节表示.

GB2312虽然能覆盖99.5%的使用场景, 但只考虑了常用的简体中文, 总共收录的汉字也不到7000个. 而两个字节理论上可以存储6万5千个左右的字符, 因此GB2312有大量空间是闲置的. 同时期, 港澳台地区使用的是BIG5, 日韩也是各自有自己得一套规则. 于是, 1995年国家有关机构基于GB2312继续扩充, 推出了GBK, 把所有空闲空间都填充完毕, 不但涵盖了BIG5定义的繁体中文, 也收录日韩文字.

所以, GBK是完全兼容GB2312的, 自然也兼容ACSII, 几乎满足汉字文化圈的需要了.

到这里, 计算机处理当地语言文字的问题得到了妥善解决, 但现在又遇到国际之间如何通信的问题. 由于编码规则不同, 各国/各地区对同一个数字所代表的字符是截然不同的, 因此用A国计算机编写的文本给B国计算机打开, 很可能就是无法阅读的乱码.

这个时候, 国际标准化组织推出了unicode, 旨在收录人类目前已知在使用的所有字符, 给它们进行统一的分类和编号.

unicode的出现使得字符集和编码规则出现区分. unicode只是字符集, 只负责给字符编号, 不规定具体应当如何编码存储. 而此前, 无论是ACSII,GB2312, 还是GBK,BIG5等, 本身既是字符集, 也是编码规则.

UTF-8, UTF-16, UTF-32就是对unicode的编码规则了.

UTF-8属于变长编码规则, 字符的长度可能在1至6个字节之间. 对于英文来说, 只需要一个字节就足够了, 而对大多数汉字来说, 则需要三个字节. 具体长度取决于字符在unicode编码的哪个区间内, 这里不展开说了.

UTF-8规定, 最高位是0开头的, 就用一个字节表示, 而ACSII正好在其中, 因此UTF-8也是兼容ACSII的. 最高位是110开头的, 就与后一个以10开头的字节拼接为一个整体. 最高位是1110开头的, 就与后两个以10开头的字节拼接为一个整体. 以此类推.

UTF-16则使用两个字节表示unicode, 期间还涉及大小端如何摆放的问题, 具体规则不表.

UTF-32使用4个字节表示unicode, 属于定长编码规则. UTF-32的优点是完全根据unicode指定的编号进行编码, 不需要做额外的解析工作, 缺点是常用的字符有大量高位是被0填充的, 浪费存储空间.

由于全世界有数百种编码规则, 各有各的名称, 所以为了便于统一管理, 各国家, 地区, 标准化组织向美国有关机构提交自己编码规则, 并进行了统一编号. 例如GBK的页码就是956, UTF-8的页码就是65001. 这样, 人们就不需要在数百种不明所以的名称中去找所需的规则了.

然而, 在Windows上, 特别是Windows10之前的版本, 用户在选择编码规则时, 常常会同时出现UTF-8和Unicode这两个选项, 按道理说, Unicode只是字符集, 不应该出现在编码规则中, 这是怎么回事呢? 原来, 微软默认把Unicode当作UTF-16进行处理, 所以这里的Unicode就相当于选择了UTF-16, 是不是很坑爹?

ASCII, GB2312, GBK, Unicode, UTF8之间的区别和联系相关推荐

  1. 深入理解-字符编码ASCII,GB2312,GBK,Unicode,UTF-8

    字符编码 简介 起初再考虑写不写这篇文章,感觉这篇文章比较枯燥乏味,而且自己感觉也没理解的太透彻,就把理解的记录下来,所以这是纪念版的 前方高能,非战斗人员请迅速撤离,我要开始装逼了. Go hard ...

  2. gbk, gb2312,big5,unicode,utf-8,utf-16的区别

    本文转自http://blog.chinaunix.net/uid-446337-id-94462.html详细说明了各种编码的区别于联系,对于支持国际化很重要,否则各种乱码能搞死人! Unicode ...

  3. 计算机网络-字符编码的由来(为什么会有乱码,ASCII、Unicode、GBK和UTF-8字符编码区别)

    为什么我们在网络中传输数据,需要指定字符编码,例如使用UTF-8.GBK等编码.那么字符编码到底是什么?以前我也很困惑这个问题,但是学习了计算机网络后我们知道,由于底层电路的设计本质,只能是识别0和1 ...

  4. 字符的编码方式 ASCII 、GBK 、UTF-8 、Unicode 、Unicode big endian

    字符的编码方式很多种 ,我们常用到的是ASCII .GBK .UTF-8 .Unicode .Unicode big endian等. 想查看的话,可以用记事本新建一个txt文档,里面输入字符或汉字, ...

  5. C#_汉字与GBK,Unicode,UTF-8编码之间的转换

    IT发展至今,字符编码版本众多,目前流行的GBK,Unicode,UTF-8编码与汉字的转换可用如下代码: private void button1_Click(object sender, Even ...

  6. GBK和UTF8之间的转换 C语言

    来自 :http://www.diybl.com/course/3_program/c++/cppsl/2008320/105871.html GBK和UTF8之间的转换可以使用MultiByteTo ...

  7. 初识编码 gbk unicode utf-8

    初识编码 gbk unicode utf-8 1. ascii 8bit 1byte(字节) 256个码位 只用到了7bit, 用到了前128个 最前面的一位是0 2. 中国人自己对计算机编码进行统计 ...

  8. ASCII、Unicode、GBK、UTF-8之间的关系

    一.ASCII编码 目录 一.ASCII编码 二.GBK编码 三.Unicode编码 四.UTF-8编码 五.Unicode和UTF-8之间的转换 六.Little endian 和 Big endi ...

  9. 常用字符集(ASCII,ISO8859-1,GB2312,GBK,Unicode)和字符编码(UTF-8,UTF-16)

    转自:https://blog.csdn.net/wn084/article/details/80363792 参考:https://blog.csdn.net/halchan/article/det ...

最新文章

  1. git 提交 merge请求 WIP
  2. JS的正则表达式[收藏]
  3. 泛函分析——有界线性算子和函数
  4. ASP.NET WebAPI String 传值问题
  5. mysql 配置文件
  6. Linux 下 Redis 安装教程
  7. 【WXS数据类型】Array
  8. 随想录(docker应用)
  9. IO流 (一) ----- 基本概念和FIle类
  10. linux 安装Paramiko模块安装和使用
  11. SVN代码更新群发邮件通知
  12. Power Designer 概念数据模型导出 逻辑数据模型和物理数据模型 生成数据库脚本
  13. 算术平均数、几何平均数、调和平均数的、标准差、方差、正态分布、异常值噪声处理
  14. 谷歌学术统计的学者 ‘h 指数’ 是什么意思
  15. ios 凭据验证_苹果内购服务器验证凭证回执Data
  16. 5990.8亿,一个如约而来的重大项目
  17. 私有协议的解密游戏:从秘文到明文
  18. 【观察】从VCF云能力九宫格,看懂“真”全栈企业云平台
  19. 2022年终总结——脚踏实地,勇敢做自己
  20. Re-脱壳技术 脱壳实战(3): 脱壳及修复IAT

热门文章

  1. datagridview使用mysql_使用DataGridView进行增删改查,并同步到数据库
  2. mysql workbench第二栏图标中英文意思
  3. vue设置列表数据添加
  4. 5g网络架构_【5G网络架构】系列之五:5G核心网向to B演进
  5. php页面审核,深入理解用PHP实现页面注册审核
  6. 信息服务器恢复需要多少时间,云服务器灾难恢复的4个计划
  7. 软件工程导论 07章软件测试
  8. 人脸识别的Python库
  9. 最大子矩阵(前缀和+贪心)
  10. 冒泡排序(【CCF】NOI Online能力测试 提高组第二题)