通过对比ASCII编码来理解Unicode编码
Unicode是个规范,可以理解为一个索引表,世界上所有字符基本上在这个索引表中都能找到唯一一个数码与之对应,就像ASCII码表一样,也是一个规范,也可以看成是一个索引表,所有的英文字符都可以在这个索引表中找到唯一一个数码与之对应。
在ASCII码表中,'\x61'对应的是字母'a',\x表示告诉计算机以十六进制方式在ASCII表中找到第61(对应10进制的97)个字符,那么'\u'就是告诉计算机以Unicode的格式在Unicode表中找到相应的字符,比如'\u4e2d'就是告诉计算机在Unicode表中找到第4e2d(十六进制)个字符(计算机中肯定是保存了这个Unicode表的,不然上哪去查),也就是“中”这个字符。
对应到python代码:

至于utf-8或utf-16等等是Unicode这个规范的具体实现,比如“中”这个字,如果采用utf-8编码,那么在将“中”保存在文件中的时候,其实写入文件中的是\xe4\xb8\xad(即16进制的e4,b8,ad),而不是“中”对应的Unicode码(即4e2d)。
那么为什么不直接用Unicode码来表示Unicode字符本身,就像ASCII码直接就用来表示ASCII字符那样?
因为ASCII码对应的就那么一百来个字符,一个字节就能搞定了,但是Unicode规范收录的是全世界的字符,是一个相当庞大的集合,如果统一用Unicode码来表示每个字符,那么每个字符需要占用四个字节才能行,这样的话,对于像“中”这样的明明可以用两个字节就能表示的字符,为了统一,也必须占用4个字节才行,这样就浪费了大量的空间。
那么如果不统一占用四个字节,而是占多少就分配多少空间呢,比如“中”就占两个字节就行了,那就给它分配两个字节空间?这样的话,计算机就没法识别字符编码的边界了,比如“中”,你如果不告诉计算机它占用两个字节,计算机怎么会知道读两个字节就是“中”的编码边界。
所以为了解决空间浪费问题和计算机如何识别具体字符的编码的边界问题,就需要用不同的编码方式去实现Unicode规范,所以就有了utf8,utf16等编码方式。
阮一峰的博客可以参考一下:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
通过对比ASCII编码来理解Unicode编码的更多相关文章
- ASCII 、UTF-8、Unicode编码
1.各种编码的由来 1.1.计算机编码的由来 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.所以只能是用一些数字来表示文本,这就是编码的由来.最早的计算机在设计时采用8个比 ...
- 转换编码,将Unicode编码转换成可以浏览的utf-8编码
//转换编码,将Unicode编码转换成可以浏览的utf-8编码 public function unicodeDecode($name) { $pattern = '/([\w]+)|(\\\u([ ...
- 学习:多字节编码(ANSI)和UNICODE编码的关系
Windows 既可以使用 Unicode 字符集又可以使用传统的字符集(如多字节编码)来实现对多种语言的支持,以适应国际市场的要求.与传统的字符集编码相比,Unicode 是世界通用的字符编码标准, ...
- UTF-8 - ASCII 兼容的多字节 Unicode 编码
描述 The Unicode 字符集使用的是 16 位(双字节)码.最普遍的 Unicode 编码方法( UCS-2) 由一个 16 位双字序列组成.这样的字符串中包括了的一些如‘\0’或‘/’这样的 ...
- 编码标准:ASCII、GBK、Unicode(UTF8、UTF16、UTF32)
英文编码(单字节字符集,码值范围0~127):字节最高位是0 ASCII编码,用于英文字符.中文编码(双字节字符集):首字节(8位)的最高位是1.可依据首字节最高位来判断中英文. GB2312, 旧版 ...
- BIG5, GB(GB2312, GBK, ...), Unicode编码, UTF8, WideChar, MultiByte, Char说明与区别
汉语unicode编译方式,BIG5是繁体规范,GB是简体规范 GB是大陆使用的国标码,BIG5码,又叫大五码,是台湾使用的繁体码. BIG5编码, GB编码(GB2312, GBK, ...), U ...
- .Net(c#)汉字和Unicode编码互相转换
{"Tilte": "\u535a\u5ba2\u56ed", "Href": "http://www.cnblogs.com&q ...
- .Net(c#)汉字和Unicode编码互相转换实例
{"name": "\u676d\u5dde", "href": "www.baidu.com"} 经常遇到这样内容的j ...
- 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)
Unicode与UTF-8互转(C语言实现):http://blog.csdn.net/tge7618291/article/details/7599902 汉字 Unicode 编码范围:http: ...
随机推荐
- 怎么让input默认为0
<span class="item_title">供应商定金</span> <div class="flex-fill flex" ...
- 文件系统EXT3,EXT4和XFS的区别
1. EXT3 (1)最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件 (2)Ext3目前只支持32000个子目录 (3)Ext3文件系统使用32位空间记录块 ...
- 【Gamma阶段】第三次Scrum Meeting
冰多多团队-Gamma阶段第三次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 卓培锦 修改可移动button以及button手感反馈优化 编辑器风格切换(夜间模式) 牛雅哲 添加优化算法 ...
- 在Asp.Net Core 3.0中如何使用 Newtonsoft.Json 库序列化数据
在.Net Core 3.0中 内置了一套Json序列化/反序列化方案,默认可以不再依赖,不再支持 Newtonsoft.Json. 但是.NET Core 3.0 System.Text.Jso ...
- CentOS7 升级 cmake
编译cmake文件时,报错:CMake 3.0.0 or higher is required. You are running version 2.8.12.2 很明显,这是 cmake 版本过低导 ...
- docker配置阿里云的仓库源以及安装docker-compose
[root@localhost mnt]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://3la ...
- 005_Philippines之行准备
一.去前必备的手续 (1)SSP SSP(Special Study Permit),又叫特殊学生许可,是由菲律宾移民局要求的,每一位前往菲律宾进行游学的学生都要办理的一种特殊许可,学校会统一进行办理 ...
- Superset配置hive数据源
1.在uri中配置 hive://localhost:10000/default 2.查询 3.如果你的hive集群是带有kerberos认证的,hive数据源需要这样配置 hive://xxx:xx ...
- 报错:pymysql.err.InternalError: (1054, "Unknown column 'AType' in 'field list'")
报错背景: 报错前sql代码展示: List = ['] # sql = "insert into test(id, name) value ("+"'"+ L ...
- The last packet successfully received from the server was 1,480 milliseconds ago.
场景:一个上传接口,需要上传几十M的文件,文件中包含10几W的数据,然后对10+W的数据进行同步批量插入,每次批量插入1W.最后返回结果. 项目上线一段时间后,上传接口出现问题,数据库用的MySQL5 ...