UTF-8, ASCII, Unicode的介绍与区分
文章出自个人博客https://knightyun.github.io/2019/01/27/ascii-unicode,转载请申明
背景
人类能通过肉眼识别文字和字符,并能通过知识了解他们的含义,但是计算机内部不论存储还是控制,都是通过二进制码实现,因为二进制的 0
, 1
刚好对应基础电路中的开和关,然后组合进行复杂的系统控制;
将人类识别的字符转换成计算机识别的二进制数据的过程,叫做编码,顾名思义,编程二进制数字码,如 0101101100011001
这样的;相反,就叫做解码,把二进制码解释为字符;
ASCII
首先ASCII全称(American Standard Code for Information Interchange,美国信息交换标准代码),是一个字符集,顾名思义,很多字符的集合;
像前面提到的,人类与计算机语言不通,一个识别字符,一个识别二进制,所以ASCII就充当了这样一个翻译官,其内容是编码与字符的映射,即一个字符只对应一个固定的编码,例如字符 A
的编码为 65
,字符 a
的编码为 122
;当然这个编码是十进制的,计算机内部把十进制转换成二进制就能供底层使用了;
另外需要知道的是,一字节(1 Byte)等于八比特位(8 bit),8 bit就是这样的:01010101
,八位二进制的所有不同表示一共 2^8 = 256 个,而且一般都是从 0 开始数,所以表示的十进制数的范围就是 0 - 255,这也是ASCII编码映射字符数的范围,包含大小写字母和一些其他常用的符号;
Unicode
看完上面肯定就会疑惑ASCII总共才表示256个字符,怎么处理当今世界巨大的信息量的,由于这个字符集最初是老外发明的,表示所有字母和一些字符对他们当时来说可能很足够了,但是先进计算机遍布全球大部分地方,汉语、韩语、日语、阿拉伯语等语言数不过来,所以ASCII明显不够用了;虽然中国之前也制定了是和中文的编码字符集叫 GB2313 等系列;
因此,便顺应时代需要产生了一种更庞大的字符集叫 Unicode,有时也叫万国码,顾名思义,几乎表示了世界上所有语言的字符,可以理解为 Unique code
,独一无二的的编码;
目前Unicode的编码范围达到了21位,即 0x0000 - 0x10ffff
的范围,二进制为 1 0000 1111 1111 1111 1111
,刚好21位;十进制表示为 1114111
,就是一百万多个字符,已经相当多了;
如果要使用UNIcode,以在 HTML 中为例,假如知道一个字符的Unicode码是 0x0394
,那么就在标签中添加代码:
Δ
放在标签中就是:
<h5>这个Unicode码对应的字符是:Δ</h5>
结果是这样:
这个Unicode码对应的字符是:Δ
其实那个Unicode编码就是对应的大小希腊字母德尔塔,数学或物理中经常用到的字符;
也可以用 JavaScript 来遍历一部分Unicode与字符的对应关系:
for (i = 0x0000; i <= 0x00ff; i++) {document.write(i + ': &#x' + i + ';<br>');
}
页面就会出现前256个字符及其Unicode码;
UTF-8, UTF-16, UTF-32
首先UTF全称(Unicode Transformation Format),所以它是一种针对前面提到的Unicode的编码格式,常见的格式就是 UTF-8,还有 UTF-16
, UTF-32
;
UTF-8 其中的 8
表示的是 8 bit
,即Unicode中每8位表示一个字符,UTF-16 和 UTF-32 类似,因为Unicode最多才21位,32位大于21位,所以 UTF-32 的格式就可以表示所有字符对应的Unicode码了,但是呢,32位也就是4字节,让每个字符都占用4字节太费空间了,所以出现了UTF-8和UTF-16;
UTF-8 定义 0 - 7 bit
的 Unicode 用一字节表示,这里就与ASCII一样了,8 - 11 bit
用两字节表示,12 - 16 bit
用三字节表示,17 - 21 bit
用四字节表示;
UTF-8 编码规则如下:
Unicode | bit | UTF-8 | byte |
---|---|---|---|
0x0000 - 0x007f | 0 - 7 | 0XXX XXXX | 1 |
0x0080 - 0x07ff | 8 - 11 | 110X XXXX 10XX XXXX | 2 |
0x0800 - 0xffff | 12 - 16 | 1110 XXXX 10XX XXXX 10XX XXXX | 3 |
0x1 0000 - 0x1f ffff | 17 - 21 | 1111 0XXX 10XX XXXX 10XX XXXX 10XX XXXX | 4 |
规律是:
- 每个字节中不足8位的,高位(左边)先用0补上,比如
0XXXX XXXX
; - 超过两字节表示的UTF-8,第一个字节高位添加两个
1
和一个0
,后面的字节高位添加10
; - 三、四字节同理,几个字节高位就添几个
1
再加上一个0
,其余字节高位添10
;
可以看出 UTF-8 这种针对不同位数使用不同字节数编码的方式有效的利用了空间,避免了一些浪费,当然,事物都有利弊,空间降下去,时间也就升上去了;
**技术文章推送** **手机、电脑实用软件分享**
UTF-8, ASCII, Unicode的介绍与区分相关推荐
- ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别
ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别 最近老为编码问题而烦燥,下定决心一定要将其弄明白!本文主要总 结网上一些朋友提供的 asc ...
- 大端小端,ascii,unicode,utf8,utf16,utf32,gb2312,gbk,gb18030等字符编码问题
字符编码的问题让我困惑了好久的一段时间,其实简单的想,字符编码没有什么东西的,可是想真弄明白还是花去了我一点时间,前端时间写了一个简单的log程序,主要的工作就是支持系统运行时输出日志信息,同时允许定 ...
- 字符集和编码规范:ASCII,Unicode和UTF-8, latin1,BIG5,GBK
字符集和编码方式:ASCII,Unicode和UTF-8, latin1,BIG5,GBK 参考: 字符集 字符集编码详解 一. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制 ...
- ASCII编码的介绍与分析
ASCII编码的介绍 在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a.b.c.d这样的52个字母(包括大写)以及0.1等数字还有一些常 ...
- ANSI,ASCII,Unicode的区别与联系
为什么80%的码农都做不了架构师?>>> ANSI,ASCII,Unicode的区别与联系 http://wenku.baidu.com/view/01d596e3524de5 ...
- 编程通用知识 字符编码(ascii,unicode,utf-8)
ascii,unicode,utf-x都是文字和数字的映射, 因为计算机只能存储数字. ascii 1.早起用8位二进制来编码英文(最前面以为是0,实际只用了7位),既产生了128个元素的ascii码 ...
- 字符编码 ASCII,Unicode和UTF-8的关系
转自:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143166410626 ...
- Unicode研究之 Unicode 13介绍
Unicode研究之 Unicode 13介绍 发布时间 2020年3月10日(公告) 总结 Unicode 13.0添加了5,930个字符,总共143,859个字符.这些新增功能包括4个新脚本,总共 ...
- ASCII Unicode GBK UTF的联系
快下班时,爱问问题的小朋友Nico又问了一个问题: "sqlserver里面有char和nchar,那个n据说是指unicode的数据,这个是什么意思." 并不是所有简单的问题都很 ...
最新文章
- 【Pandas库】(1) Series的创建方法
- java日志切割工具_用 Java 实现的日志切割清理工具
- 深入理解Spring Boot数据源与连接池原理
- 一键发布部署vs插件[AntDeploy]开源了
- openshift_在OpenShift上扩展Java EE微服务
- 求交错序列前N项和(15 分)
- Linux下如何安装.cer证书
- 论 js中:(class、id)出乎意料的优先级?- 案例篇
- Safari 时间格式转换 NAN 问题
- 【Luogu】P2634聪聪可可(树形DP)
- html写了外部样式表,外部样式表怎么写
- Burp Suite 自带浏览器Burp‘s Browser(Chromium)沙盒sandbox问题的解决
- neo4j 最短路径 java_Neo4j查询节点间最短路径
- Premiere使用教程(五)视频导出及添加视频、音频过渡
- 查看Ubuntu下的U盘
- find_in_set学习与思考
- 《信条》过去不可挽回, 未来已成史书(无剧透版)
- SSE和WebSocket的用法和比较
- vue created 无效
- Python4班平均成绩统计_2021小升初必看!成都各个初中成绩如何?师资咋样?不同成绩的孩子该怎么准备?...
热门文章
- html5-了解元素的属性
- 电池和Adapter切换电路改进实验(转)
- 关于win7系统无线及本地连接图标异常的处理(可以连接无线)
- USACO 3.2.3 Spin
- C++时间类的运算符重载
- flutter图片点击跳转_Flutter系列之Platform Channel使用详解
- 判断整除(动态规划,递推)
- vi/vim使用进阶: 文件浏览和缓冲区浏览
- React 折腾记 - (4) 侧边栏联动Tabs菜单-增强版(结合Mobx)
- Metaspace泄漏排查