【编码】彻底弄懂ASCII、Unicode、UTF-8之间的关系
计算机中的所有字符,说到底都是用二进制的0、1的排列组合来表示的,因此就需要有一个规范,来枚举规定每个字符对应哪个0、1的排列组合,这样的规范就是字符集。
ASCII
全称是“美国信息交换标准码”(American Standard Code for Information Interchange),制定于20世纪60年代,这套规范规定了128个字符对应的二进制码。128=27,即只需要7个bit就能完全表示,因此每个ASCII码只需占用1个字节(1Byte = 8bit)。
例如,大写字母A对应ASCII编码是01000001。点击查看完整的ASCII码表
假如一个文本文件存放了100个ASCII编码的字符,那么这个文件内容的大小就是100B。
ASCII规范只涵盖了英文字母、数字和一部分符号(包括换行符、制表符等控制性符号),但世界上还有许多语言的字符需要能够被计算机系统处理(比如几万个汉字),这样一来就需要制定一个比ASCII大得多的字符集,足够把全世界所有字符都囊括进去。这个字符集就是Unicode。
Unicode
这是全世界最大的字符集,相对于ASCII码,Unicode大大扩展了编码位数到16 - 32位,意味着它理论上最多可以容纳 232≈42亿 个字符。Unicode包含了各种字母、中日韩文字、emoji等几乎所有语言和领域的符号,如汉字“我”对应的Unicode是01100010 00010001,写成16进制就是6211。现在互联网上传递、展示所使用的编码基本都是Unicode。它的最低7位与ASCII码是完全兼容的,即如果用16位Unicode来表示大写字母A,就会写成00000000 01000001。
UTF-8
Unicode覆盖面很广,但如果一定要用16乃至32位来存储和传输每个符号,对于主要使用ASCII码的西方用户,势必会出现大量仅仅用于补位的0位,造成硬件资源浪费。为此,人们发明了UFT-8编码,使用可变的位数来表示Unicode里的字符。
UTF-8是怎么做的呢?
1. 对于单字节就可表示的字符,第一位为0,后面7位为该字符的ASCII码
2. 对于需要≥2个字节才可表示的字符,第一个字节以1开头,且该字符总共占了几个字节,就插入几个连续的1;连续的1结束后,插入一个0。后续字节全部以01开头。
如下表所示(表格来自阮一峰老师的博客)
Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
将“我”编码成UTF-8的操作方法如下:
“我”的Unicode码是6211,对应表里3字节编码的区间。在Unicode二进制码相应位置插入控制位,得到
11100110 10001000 10010001
写成16进制就是E68891,这样就得到了UTF-8编码。
当然,对于一般的开发者来说,编码细节是次要的,只要知道是怎么一回事就行了~
所以,当一个HTML页面被添加了<meta charset="utf-8">标签时,计算机就知道,每当这个页面文本的字节流里发现一个E68891,就应该把它视为“我”字。但假如页面编码时不是遵循的UTF-8,而是GB2132(它和UTF-8毫无关系),那么就会出现乱码——计算机错误解读了这些字节的意思。
【编码】彻底弄懂ASCII、Unicode、UTF-8之间的关系的更多相关文章
- python中,ascii,unicode,utf8,gbk之间的关系梳理
在计算机中,经常遇到编码问题,本节主要梳理下ascii,unicode,utf8,gbk 这几种编码之间的关系. ASCII 计算机中,所有数据都以0和1来表示.在一开始的时候,要表示的内容比较少,人 ...
- 字符编码:Unicode和UTF-8之间的关系
Unicode和UTF-8之间的关系 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256 ...
- Unicode和UTF-8之间的关系
作者: 阮一峰 日期: 2007年10月28日 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步 ...
- ASCII、ANSI、GB2312、Unicode、UTF-8之间的关系
1.ASCII码: ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是基于拉丁字母的一套电脑编码系统.它主要用于 ...
- erl0008 - unicode 和 utf-8之间的关系
转载:http://blog.jobbole.com/84903/ 原文出处: 卢钧轶 欢迎分享原创到伯乐头条 本文将简述字符集,字符编码的概念.以及在遭遇乱码时的一些常用诊断技巧. 背景:字符集 ...
- unicode和utf8之间的关系
,字符编码是计算机技术的基石,想要熟练使用计算机,懂得一点字符编码的知识,还是很有必要的. 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit ...
- Unicode 和 UTF-8 之间的关系
一.ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是说,一个 ...
- 由Unicode编码想到弄懂编码表
test unicode好 007400650073007400200075006E00690063006F00640065597D 这是一个Unicode编码,一共六七万的汉字,可以说Unicode ...
- ASCII UNICODE UTF "口水文"
最近接了一个单是需要把非 UTF-8 (No BOM)编码的文件转换成 UTF-8 (No BOM),若此文件是 UTF-8 但带有 BOM ,需要转换成不带 BOM 的.于是开启了一天的阅读.首先花 ...
随机推荐
- html代码/如何做到有横线无竖线的表格/或横线有颜色/竖线没颜色
改变它的css样式,table{ border-collapse:collapse;}table tr td{ border-bottom:1px solid #dedede;}
- Scrapy持久化存储-爬取数据转义
Scrapy持久化存储 爬虫爬取数据转义问题 使用这种格式,会自动帮我们转义 'insert into wen values(%s,%s)',(item['title'],item['content' ...
- 关于jsp页面的复选框(checkbox)取值的获取问题
复选框的取值问题可以使用js和jQuery来获取: jQuery API : each(callback) :以每一个匹配的元素作为上下文来执行一个函数. :checked :匹配所有选中的被选中元素 ...
- maven中的setting文件
localRepository默认jar包下载到本地哪个目录下 pluginGroups 把自己的插件放在这里进行管理 这样不用写groupId和artifactId 一个生命周期包含很多 ...
- python中68个内置函数的总结
内置函数 内置函数就是python给你提供的, 拿来直接用的函数, 比如print., input等. 截止到python版本3.6.2 python一共提供了68个内置函数. #68个内置函数 # ...
- k 近邻算法解决字体反爬手段|效果非常好
字体反爬,是一种利用 CSS 特性和浏览器渲染规则实现的反爬虫手段.其高明之处在于,就算借助(Selenium 套件.Puppeteer 和 Splash)等渲染工具也无法拿到真实的文字内容. 这种反 ...
- Object类和@Data注解
特别说明:若是有不对的地方欢迎指正 简要概述: Object类是java中所有类默认继承的一个类.下面介绍一下Object类中的一些重要的方法,面试中也是经常会被问到的.尤其是==和equals的区别 ...
- MySQL必知必会(创建计算字段(field))
#字段(field)基本上和列(column)的意思相同 SELECT Concat(vend_name, ' (', vend_country, ')') FROM vendors ORDER BY ...
- ios-AutoLayout(自动布局代码控制)简单总结
转自:http://blog.sina.com.cn/s/blog_7c336a830102vaht.html 原理:IOS6.0 之后,苹果优化了UI界面的布局方式,提出了自动布局的概念,和之前的a ...
- 一款简单的C++猜数字游戏(新手必学)
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:1只小弛 废话不多说,直接上代码! #include<bits/s ...