文章出自个人博客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-8UTF-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的介绍与区分相关推荐

  1. ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别

    ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别 最近老为编码问题而烦燥,下定决心一定要将其弄明白!本文主要总 结网上一些朋友提供的 asc ...

  2. 大端小端,ascii,unicode,utf8,utf16,utf32,gb2312,gbk,gb18030等字符编码问题

    字符编码的问题让我困惑了好久的一段时间,其实简单的想,字符编码没有什么东西的,可是想真弄明白还是花去了我一点时间,前端时间写了一个简单的log程序,主要的工作就是支持系统运行时输出日志信息,同时允许定 ...

  3. 字符集和编码规范:ASCII,Unicode和UTF-8, latin1,BIG5,GBK

    字符集和编码方式:ASCII,Unicode和UTF-8, latin1,BIG5,GBK 参考: 字符集 字符集编码详解 一. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制 ...

  4. ASCII编码的介绍与分析

    ASCII编码的介绍 在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a.b.c.d这样的52个字母(包括大写)以及0.1等数字还有一些常 ...

  5. ANSI,ASCII,Unicode的区别与联系

    为什么80%的码农都做不了架构师?>>>    ANSI,ASCII,Unicode的区别与联系 http://wenku.baidu.com/view/01d596e3524de5 ...

  6. 编程通用知识 字符编码(ascii,unicode,utf-8)

    ascii,unicode,utf-x都是文字和数字的映射, 因为计算机只能存储数字. ascii 1.早起用8位二进制来编码英文(最前面以为是0,实际只用了7位),既产生了128个元素的ascii码 ...

  7. 字符编码 ASCII,Unicode和UTF-8的关系

    转自:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143166410626 ...

  8. Unicode研究之 Unicode 13介绍

    Unicode研究之 Unicode 13介绍 发布时间 2020年3月10日(公告) 总结 Unicode 13.0添加了5,930个字符,总共143,859个字符.这些新增功能包括4个新脚本,总共 ...

  9. ASCII Unicode GBK UTF的联系

    快下班时,爱问问题的小朋友Nico又问了一个问题: "sqlserver里面有char和nchar,那个n据说是指unicode的数据,这个是什么意思." 并不是所有简单的问题都很 ...

最新文章

  1. 【Pandas库】(1) Series的创建方法
  2. java日志切割工具_用 Java 实现的日志切割清理工具
  3. 深入理解Spring Boot数据源与连接池原理
  4. 一键发布部署vs插件[AntDeploy]开源了
  5. openshift_在OpenShift上扩展Java EE微服务
  6. 求交错序列前N项和(15 分)
  7. Linux下如何安装.cer证书
  8. 论 js中:(class、id)出乎意料的优先级?- 案例篇
  9. Safari 时间格式转换 NAN 问题
  10. 【Luogu】P2634聪聪可可(树形DP)
  11. html写了外部样式表,外部样式表怎么写
  12. Burp Suite 自带浏览器Burp‘s Browser(Chromium)沙盒sandbox问题的解决
  13. neo4j 最短路径 java_Neo4j查询节点间最短路径
  14. Premiere使用教程(五)视频导出及添加视频、音频过渡
  15. 查看Ubuntu下的U盘
  16. find_in_set学习与思考
  17. 《信条》过去不可挽回, 未来已成史书(无剧透版)
  18. SSE和WebSocket的用法和比较
  19. vue created 无效
  20. Python4班平均成绩统计_2021小升初必看!成都各个初中成绩如何?师资咋样?不同成绩的孩子该怎么准备?...

热门文章

  1. html5-了解元素的属性
  2. 电池和Adapter切换电路改进实验(转)
  3. 关于win7系统无线及本地连接图标异常的处理(可以连接无线)
  4. USACO 3.2.3 Spin
  5. C++时间类的运算符重载
  6. flutter图片点击跳转_Flutter系列之Platform Channel使用详解
  7. 判断整除(动态规划,递推)
  8. vi/vim使用进阶: 文件浏览和缓冲区浏览
  9. React 折腾记 - (4) 侧边栏联动Tabs菜单-增强版(结合Mobx)
  10. Metaspace泄漏排查