字节是一个8位(bits)的物理存储单元。

字符是文化相关的符号。

ASCII(ANSI)

ASCII:American Standard Code for Information Interchange,美国信息互换标准代码。有时也称为ANSI
这是一切的开端。

ASCII码随着第一台意义上的计算机一同诞生。

起初,它被编到了0~127,一共128个。包括33个控制字符95个可打印字符

后来计算机得到初步推广, 一些国家的字符也请求加入ASCII。

ASCII最终被扩展到了256个——0~127的"先辈",与128~255的扩展字符集,共同组成了它

DBCS

DBCS:Double Byte Charecter Set ,双字节字符集。
它服务于中华民族。
“一个汉字顶俩个英文字符"这个"圣经”,就来源于此。

GB2312

当计算机走向世界时,什么"美帝信息互换标准代码",肯定满足不了世界人民的要求了。

于是,中国人毫不留情的将ASCII的127之后的扩展字符集砍掉。并且规定:

当两个大于127的字符连在一起时,就表示一个汉字(▲)。前面的字节称为高字节,后面的字节称为低字节
 
不行,美帝的标点符号我们也不用!英文字母和阿拉伯数字都要本土化!>_<

于是,将0~127中的英文字母、数字、标点符号全部重新编码,看作一种特殊的汉字———改为双字节

因此,这种编码方式中,字母、数字、标点符号是两种形态共存的———这就是半角全角
 
理解: GB2312是ASCII最早的中文扩展,但是只包含了6000多个常用字,不包括繁体字。

GBK

汉字文化博大精深,不像256的ASCII就能承载英文。GB2312标准还不够。

于是,又规定,只要第一个字节(高字节)是大于127的,不管第二位(低字节),它们都会共同表示一个汉字(▲)。

理解: GBK包含了GB2312的所有字符,并新加入了20000个汉字及汉字符号。(☑ 完全兼容GB2312)

GB18030

中国是一个统一的多民族的国家。字符编码自然要带上少数民族的文字

理解: GB18030又基本包含了GBK的所有字符。(☑ 基本兼容GBK)

(★) 重点理解的 ↓

GB2312→GBK→GB18030,是后者(兼容)包含前者的关系。变化当然不止这些。

GB2312和GBK都是双字节编码(其实是单双并存,毕竟0~127的ASCII部分天生单字节)

GB18030则是一二四字节变长编码(每种长度分别对应ASCII部分GBK部分新增部分


  于辚辚车声中,于瘦湖沙堤旁,于亭台烟雨里,于连亘江山上——中国悠久历史、深远文化、多元民族、蓬勃生命,已然瓜瓞绵延了千载暑寒春秋。

  蔡候纸承载着的它们,递交给了千年后的我们。我们用电信号将这些信息永久的镌刻在了历史长卷上,寄放在了8比特的存储单元中,又递交给了无限的未来。


unicode

意为universal,是字符集的大一统者。

世界上国家与民族众多,如果每种语言都像DBCS那样无情的砍掉ASCII的一部分,并不断向后追加字符…这是一件可怕的事情

因而unicode应运而生。
 
unicode是一个字符集(Character set)。也仅仅是一个字符集它实现了二进制代码(通常用16进制表示)与字符的一一对应。

数字与字符双向唯一的映射。(

下面给出一句我们获取曾经奉为真理的话,现在我们要彻彻底底的推翻它:

对于unicode码,每个字母、数字、符号,甚至中文,全部都占两个字节。

unicode仅仅是一个字符集,仅仅提供映射关系。至于怎样编码,如何占用字节…这与unicode毫无关系记住,毫无关系。

因此,这句话的语境从根本上就是一个极其错误的认知。

事实上,在unicode字符集出现后的很长一段时间内,unicode的实现方式是极其混乱的——数字与字符的映射虽然已经统一,但这个数字如何分配字节去存储?读取的时候又如何知道几个字节对应一个字符呢?

这是与unicode字符集完全不同层次的概念:unicode的实现方式,也称为编码方案
 
 
unicode的实现方式

UTF-8

Unicode编码(十六进制) UTF-8 字节流(二进制)
000000-00007F 0xxxxxxx
000080-0007FF 110xxxxx 10xxxxxx
000800-00FFFF 1110xxxx 10xxxxxx 10xxxxxx
010000-10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

不难看出UTF-8编码的特点:对不同范围的字符使用不同长度的编码。这也被称之为字节变长编码

UTF-8存储字符,也就是存储字符映射的数字时,可以是1, 2, 3, 4字节长度

一般来说,欧洲字符1~2个字节,亚洲字符3个字节,附加字符4个字节

UCS-2

UCS-2中,所有字符都是严格的16位长度,也就是所有字符长度都为2字节

极具误导性的狭义unicode,就是指的unicode的UCS-2实现方式(▲注意

UTF-16

UTF-16是UCS-2中缺少的附加字符的补充。也就是说,是UCS-2的严格父集。

UTF-16中的字符是严格的16位或32位,也就是说,UTF-16的字符长度为严格的2字节或4字节

还有一个常见的认知错误:

unicode码只能表示65536个字符

这个错误认知的可怕之处在于,与"unicode所有字符都是2字节"完成了惊人而荒唐的互洽:2^16 = 65536

首先,unicode只是个字符集,说它的字符都占2个字节本来就是根本的认知错误;另外,unicode可以映射的字符,也远远不止65536个:

Unicode 目前规划的总空间是17个平面(平面0至16),0x0000 至 0x10FFFF。每个平面有 65536 个码点

17个平面中,基本多文种平面(Basic Multilingual Plane,BMP,也就是第0平面)最为常见与重要

BMP平面内的字符,用utf-8方式实现,则占1~3字节;用utf-16实现,则全部占2个字节;
超出BMP的部分(辅助平面的附加字符),无论是utf-8还是utf-16,都是占4字节

【图文】有趣、通俗、严谨地解释ASCII、DBK、unicode、utf-8的区别(建议收藏)相关推荐

  1. 通俗说法+专业解释,载波聚合

    通俗说法+专业解释,载波聚合那些事全明白 发布时间:2016-05-19 13:36:30 来源:RF技术社区 (http://rf.eefocus.com) 标签:传输带宽载波聚合(CA)LTE频段 ...

  2. 字符编码笔记:ASCII,Unicode 和 UTF-8(转帖、留着自己学习)

    http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 阮一峰的网络日志 » 首页 » 档案 搜索 上一篇:<新编 ...

  3. ASCII,Unicode,UTF-8,GB2312一些关于编码的理解

    2019独角兽企业重金招聘Python工程师标准>>> 字符编码:ASCII,Unicode,UTF-8,GB2312 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件 ...

  4. 万字超强图文讲解AQS以及ReentrantLock应用(建议收藏)

    写在前面 祝大家儿童节快乐????,保持童心,这篇文章作为儿童节礼物????送给大家.进入源码阶段了,写了十几篇的 并发系列 知识铺垫终于要派上用场了.相信很多人已经忘了其中的一些理论知识,别担心,我 ...

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

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

  6. 字符编码笔记:ASCII,Unicode和UTF-8(转载)

    字符编码笔记:ASCII,Unicode和UTF-8 作者: 阮一峰 日期: 2007年10月28日 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个 ...

  7. 字符编码原理 ASCII,Unicode和UTF-8 - - ITeye技术网站

    字符编码原理 ASCII,Unicode和UTF-8 - - ITeye技术网站 字符编码原理 ASCII,Unicode和UTF-8 博客分类:coder加密与解密 编码utf-8unicode原理 ...

  8. ASCII与unicode的转换

    不管什么时候,只要COM方法返回一个串,这个串都是Unicode串(这里指的是写入COM规范的所有方法).Unicode是一种字符编码集,类似ASCII,但用两个字节表示一个字符.如果你想更好地控制或 ...

  9. ❤️缓存集合(一级缓存、二级缓存、缓存原理以及自定义缓存—源码+图文分析,建议收藏) ❤️

    ❤️缓存集合(一级缓存.二级缓存.缓存原理以及自定义缓存-源码+图文分析,建议收藏) ❤️ 查询 : 连接数据库 ,耗资源!一次查询的结果,给他暂存在一个可以直接取到的地方!--> 内存 : 缓 ...

最新文章

  1. hadoop无法访问50070端口怎么办?
  2. windows dos命令窗口的环境变量
  3. 《树莓派开发实战(第2版)》——2.8 利用VNC远程控制树莓派
  4. vue及脚手架的下载安装,创建项目
  5. 修改显卡型号软件_马甲显卡又双叕来了 怎么选知道吗?
  6. keepalived(4)——演练故障出现时keepalived的状态
  7. plsql视图添加表字段_教你不到两分钟,快速创建数据透视图
  8. 内网中入侵linux系统,MSSQL 入侵提权之内网渗透案例分析
  9. c语言标识符的规范,初识C语言-声明和使用变量、标识符的命名规范以及基本数据类型...
  10. mysql去掉重复数据只保留一条,以及取分组后的一条数据
  11. 年轻时不多闯闯,老了拿什么来吹
  12. .Net将Base64字符串转换为Image对象或保存为图片到本地
  13. 分页选择器v-selectpage的介绍
  14. 海康威视的视频web端(vue开发)的实时预览、录像回放和页面拖拽
  15. 一连三问 !!! 什么是内存对齐?内存对齐的原因是什么?内存对齐的好处是什么?
  16. 3DMax如何安装?3DMax2018软件安装图文教程全解
  17. 自动驾驶汽车传感器融合系统及多传感器数据融合算法浅析
  18. 【大话设计模式】——设计模式概论
  19. 360怎样修改wifi服务器地址,360路由器怎么重新设置?
  20. ddmmyy日期格式是多少_如何用SAS读取月份为英文缩写并且格式为ddmmyy的日期数据...

热门文章

  1. 【学习】日期函数:5、计算用户的平均次日留存率
  2. 告别内卷,Java面试指南霸榜Github Trending,刷完进大厂
  3. Pythom(6.25)异常与日志
  4. android udp广播 权限,安卓UDP广播/多播注意事项
  5. 相对论通俗演义(1-10) 第三章
  6. p5js怎么导入html,p5.js loadTable()用法及代码示例
  7. Java compare方法和compareTo方法
  8. 收藏:Kris Allen (Ain't No Sunshine) (美国偶像第8季冠军争夺表演曲目) (非常动听)
  9. 热度太凶猛!半年涨幅近1万/平,吴江太湖新城已经走上3W+
  10. nginx 配置https