链接

utf-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念

要想先讲清楚他们的区别,首先应该讲讲Unicode的来由。

  • 众所周知,在盘古开天辟地之前,sorry ,走错片场了(⊙o⊙)…在计算机发明的时候 ,由于计算机你只能表示二进制的数据,美帝人民为了交流通信方便,约定了一个编码系统,就是ASCII码,把abc..xyz...ABC...XYZ...!@#...等字符分别和0,1,2,3,4......对应,发现差不多刚好128个数,半个字节的长度,为了防止以后需要为新的符号编码,于是干脆取一个字节,最高位置为0。后七位从0-127分别对每一个符号编码。

    • 于是,计算机每次读取一个字节,然后参照ASCII表把这些编码翻译成字符。美国人民很高兴,拿着自己玩去了.......
  • 后来欧洲人也玩计算机,发现不行啊,还有很多符号(法语,德语)ASCII没办法表示啊,于是欧洲人自己也撸了一套编码,一个字节的长度,把最高位也用掉了。这套编码叫ISO。

    • 和ASCII表类似,计算机也是每次只读一个字节,然后按照ISO表,解码出字符。于是欧洲人民也很高兴。
  • 中国人不高兴了,特么我们汉字有几万个,常用的就有几千个,没有两个字节根本交不了货。于是勤劳勇敢的中国人民就破天荒的用了两个字节来表示中文。整出一套GBK。为了现实我中华民族兼容并蓄,我们兼容了ASCII编码。

    • gbk编码规定,计算机不能在每次都只读一个字节那么死板了,你要先看看第一位是不是为0,要是为0 的话,就当作ASCII码来读入一个字节,不然的话就读入两个字节。
    • 计算机 : WTF ?? !!

于是天下就很乱了,欧洲人看不懂我们发过去的信息,我们也看不懂他们的东西,美国人看不懂我的东西,不过我们能看懂他们的信息。。。哈哈。

总之,天下大乱,群雄并起,百姓生灵涂........

这个时候,就有个国际组织站出来了,说,这么着吧,我来撸一套编码,把大家的编码都归纳进来。于是unicode编码就出现了。这套编码表的编号从0一直算到了100多万(三个字节)。每一个区间都对应着一种语言的编码。目前几乎收纳了全世界大部分的字符。所有的字符都有唯一的编号,这就解决了解码的冲突,于是天下大定!但是,unicode把大家都归纳进来,却没有为编码的二进制传输和二进制解码做出规定。只留下一句:大哥只能帮你到这里了。

我知道你一定在想,要个毛的规定啊,每次让计算机读取三个字节然后参照Unicode表解码就好了。想法是好的,但是如果类似于1号编码这样的小数据编号也要三个字节的话,那么也就是0x000001,这简直就是浪费啊,明明一个字节就可以表示了,你非得整三个,所以你到底是几个意思呢?

不管怎么样,大哥虽然走了,但是问题还得解决啊,于是,就出现了如下解决方案:uft-8,utf-16,utf-32这些编码方案。utf-16是用两个字节来编码所有的字符,utf-32则选择用4个字节来编码。下面只讲一下utf-8这种解决方案,因为它用的最多,用得最多是因为在当时它的方案最好,最节省资源。

  • utf-8

utf-8为了节省资源,采用变长编码,编码长度从1个字节到6个字节不等

utf-8.png
  • 我知道你想说,明明看起来utf-16更加节省资源,节省空间,正常人都看得出来。但实际上,当时,互联网上绝大部分存在的资源都是英文的,英文在utf-16中也是2个字节,而在utf-8中则是1个字节。在当时,显然是utf-8更加节省资源。现在我们在中文世界里来比较他们,则是utf-16更加节省资源。

OK,关于unicode和utf-8的区别已经解释完毕了。下面用一个图来巩固一下那些区别

Unicode与uft-8的结构关系.png

作者:拉丁吴
链接:http://www.jianshu.com/p/36d20de2a1ee
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

utf-8和Unicode的区别的更多相关文章

  1. ascII、iso、utf-8、Unicode的区别

    utf-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念,utf-8是unicode的实现方式. 要想先讲清楚他们的区别,首先 ...

  2. PYTHON编码处理-str与Unicode的区别

    一篇关于STR和UNICODE的好文章 整理下python编码相关的内容 注意: 以下讨论为Python2.x版本, Py3k的待尝试 开始 用python处理中文时,读取文件或消息,http参数等等 ...

  3. 字符编解码的故事(ASCII,GBK,Unicode,Utf-8区别)

    很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们认为8个开关状态作为原子单位很好,于是他们把这称为"字节". 再后来,他们又做了一 ...

  4. 编码问题2 utf-8和Unicode的区别

    utf-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念 要想先讲清楚他们的区别,首先应该讲讲Unicode的来由. 众所周知 ...

  5. ASCII与UNICODE的区别

    1.ASCII的特点 ASCII 是用来表示英文字符的一种编码规范.每个ASCII字符占用1 个字节,因此,ASCII 编码可以表示的最大字符数是255(00H—FFH).这对于英文而言,是没有问题的 ...

  6. 转 PYTHON2 编码处理-str与Unicode的区别

    https://www.cnblogs.com/long2015/p/4090824.html

  7. Unicode、UTF-8 和 ISO8859-1到底有什么区别

    说明:本文转载于新浪博客,旨在方便知识总结.原文地址:http://blog.sina.com.cn/s/blog_673c81990100t1lc.html 本文主要包括以下几个方面:编码基本知识, ...

  8. AJPFX解析关于编码ansi、GB2312、unicode与utf-8的区别

    大家平时遇到乱码问题是否有自己的一套解决方案?这篇文章就是介绍一下常用的编码方式关于编码ansi.GB2312.unicode与utf-8的区别 先做一个小小的试验: 在一个文件夹里,把一个txt文本 ...

  9. ASCII码、ISO8859-1、Unicode、GBK和UTF-8 的区别

    为什么需要编码? 计算机中最小的存储单位是字节(byte),一个字节所能表示的字符数又有限,1byte=8bit,一个字节最多也只能表示255个字符,而世界上的语种又多,都有各种不同的字符,无法用一个 ...

随机推荐

  1. NS3 使用NS3工具PyViz

    官方文档 跑了一个样例(first.py): 由于 NetAnim 对我实在是有点不友好,在 PyViz 和 NetAnim 之间,我倾向前者.后者需要生成.xml文件,相比前者较为麻烦. 安装过程: ...

  2. UVa 10163 仓库守卫

    https://vjudge.net/problem/UVA-10163 题意: 有n个仓库,m个管理员,每个管理员有一个能力值P(接下来的一行有m个数,表示每个管理员的能力值) 每个仓库只能由一个管 ...

  3. C++基础-string截取、替换、查找子串函数

    1. 截取子串 s.substr(pos, n)    截取s中从pos开始(包括0)的n个字符的子串,并返回 s.substr(pos)        截取s中从从pos开始(包括0)到末尾的所有字 ...

  4. spark必知必会的基本概念

    首先我们从宏观的视角来窥视下大数据技术框架: 图1 大数据技术框架 从图1可以看出,数据源-数据收集-数据存储-资源管理,这是我们进行数据分析和处理的基本;图中的计算框架包括批处理.交互式分析和流处理 ...

  5. Oracle数据库system用户忘记了密码怎么办

    1.在运行里面输入cmd调出dos窗口,然后在dos窗口中输入sqlplus /nolog 如:D:\oracle\ora92\bin>sqlplus /nolog 2.输入连接命令 如:SQL ...

  6. 递归C++

    递归C++ 一.递归简介 自己调用自己 二.递归写法 2.1 写法介绍 先写出问题的递推公式 递归部分的边界条件就是递推公式中的边界条件 递归部分的主体部分就是递推公式中的主体部分 2.2 实例 (1 ...

  7. response.sendRedirect跳转 jsp:forward跳转

    response.sendRedirect跳转 <% response.sendRedirect("online.jsp"); %> jsp:forward跳转 < ...

  8. php--------使用js生成二维码

    php生成二维码有多种方式,可以在JS中,也可以使用php库,今天写的这个小案例是使用JS生成二维码. 其他方式可以看下一篇文章:php--------php库生成二维码和有logo的二维码 网站开发 ...

  9. splay训练

    1, CF 455D 2, CF 420D 3, CF 414E

  10. 诡异的小bug 自动生成font标签包裹span标签中的文字

    某天测试自己写的网站的时候突然发现页面上一些文字排版出现了一些奇怪的错乱,在控制台发现错乱的文字被font标签包裹着 ,但是代码中根本没用用到font标签 后来发现是因为自己不小心点了谷歌浏览器地址栏 ...