【图文】有趣、通俗、严谨地解释ASCII、DBK、unicode、utf-8的区别(建议收藏)
字节是一个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的区别(建议收藏)相关推荐
- 通俗说法+专业解释,载波聚合
通俗说法+专业解释,载波聚合那些事全明白 发布时间:2016-05-19 13:36:30 来源:RF技术社区 (http://rf.eefocus.com) 标签:传输带宽载波聚合(CA)LTE频段 ...
- 字符编码笔记:ASCII,Unicode 和 UTF-8(转帖、留着自己学习)
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 阮一峰的网络日志 » 首页 » 档案 搜索 上一篇:<新编 ...
- ASCII,Unicode,UTF-8,GB2312一些关于编码的理解
2019独角兽企业重金招聘Python工程师标准>>> 字符编码:ASCII,Unicode,UTF-8,GB2312 从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件 ...
- 万字超强图文讲解AQS以及ReentrantLock应用(建议收藏)
写在前面 祝大家儿童节快乐????,保持童心,这篇文章作为儿童节礼物????送给大家.进入源码阶段了,写了十几篇的 并发系列 知识铺垫终于要派上用场了.相信很多人已经忘了其中的一些理论知识,别担心,我 ...
- ASCII、Unicode、GBK、UTF-8之间的关系
一.ASCII编码 目录 一.ASCII编码 二.GBK编码 三.Unicode编码 四.UTF-8编码 五.Unicode和UTF-8之间的转换 六.Little endian 和 Big endi ...
- 字符编码笔记:ASCII,Unicode和UTF-8(转载)
字符编码笔记:ASCII,Unicode和UTF-8 作者: 阮一峰 日期: 2007年10月28日 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个 ...
- 字符编码原理 ASCII,Unicode和UTF-8 - - ITeye技术网站
字符编码原理 ASCII,Unicode和UTF-8 - - ITeye技术网站 字符编码原理 ASCII,Unicode和UTF-8 博客分类:coder加密与解密 编码utf-8unicode原理 ...
- ASCII与unicode的转换
不管什么时候,只要COM方法返回一个串,这个串都是Unicode串(这里指的是写入COM规范的所有方法).Unicode是一种字符编码集,类似ASCII,但用两个字节表示一个字符.如果你想更好地控制或 ...
- ❤️缓存集合(一级缓存、二级缓存、缓存原理以及自定义缓存—源码+图文分析,建议收藏) ❤️
❤️缓存集合(一级缓存.二级缓存.缓存原理以及自定义缓存-源码+图文分析,建议收藏) ❤️ 查询 : 连接数据库 ,耗资源!一次查询的结果,给他暂存在一个可以直接取到的地方!--> 内存 : 缓 ...
最新文章
- hadoop无法访问50070端口怎么办?
- windows dos命令窗口的环境变量
- 《树莓派开发实战(第2版)》——2.8 利用VNC远程控制树莓派
- vue及脚手架的下载安装,创建项目
- 修改显卡型号软件_马甲显卡又双叕来了 怎么选知道吗?
- keepalived(4)——演练故障出现时keepalived的状态
- plsql视图添加表字段_教你不到两分钟,快速创建数据透视图
- 内网中入侵linux系统,MSSQL 入侵提权之内网渗透案例分析
- c语言标识符的规范,初识C语言-声明和使用变量、标识符的命名规范以及基本数据类型...
- mysql去掉重复数据只保留一条,以及取分组后的一条数据
- 年轻时不多闯闯,老了拿什么来吹
- .Net将Base64字符串转换为Image对象或保存为图片到本地
- 分页选择器v-selectpage的介绍
- 海康威视的视频web端(vue开发)的实时预览、录像回放和页面拖拽
- 一连三问 !!! 什么是内存对齐?内存对齐的原因是什么?内存对齐的好处是什么?
- 3DMax如何安装?3DMax2018软件安装图文教程全解
- 自动驾驶汽车传感器融合系统及多传感器数据融合算法浅析
- 【大话设计模式】——设计模式概论
- 360怎样修改wifi服务器地址,360路由器怎么重新设置?
- ddmmyy日期格式是多少_如何用SAS读取月份为英文缩写并且格式为ddmmyy的日期数据...
热门文章
- 【学习】日期函数:5、计算用户的平均次日留存率
- 告别内卷,Java面试指南霸榜Github Trending,刷完进大厂
- Pythom(6.25)异常与日志
- android udp广播 权限,安卓UDP广播/多播注意事项
- 相对论通俗演义(1-10) 第三章
- p5js怎么导入html,p5.js loadTable()用法及代码示例
- Java compare方法和compareTo方法
- 收藏:Kris Allen (Ain't No Sunshine) (美国偶像第8季冠军争夺表演曲目) (非常动听)
- 热度太凶猛!半年涨幅近1万/平,吴江太湖新城已经走上3W+
- nginx 配置https