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码来读入一个字节,不然的话就读入两个字节。

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

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

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

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

不管怎么样,大哥虽然走了,但是问题还得解决啊,于是,就出现了如下解决方案:uft-8,utf-16,utf-32这些编码方案。utf-16是用两个字节来编码所有的字符,utf-32则选择用4个字节来编码。下面只讲一下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的区别已经解释完毕了。下面用一个图来巩固一下那些区别

转载于:https://www.cnblogs.com/CQqf2019/p/11095366.html

UTF-8 和 Unicode 的区别相关推荐

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

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

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

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

  3. 字符编码 ansi unicode utf-8 区别

    简介 为使计算机支持更多语言,通常使用 0x80~0xFFFF 范围的 2 个 字节来表示 1 个字符.比如:汉字 '中' 在 ANSI编码 中文操作系统中,使用 [0xD6,0xD0] 这两个字节存 ...

  4. python跟unicode一样吗_PYTHON编码处理-str与Unicode的区别

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

  5. Python的ASCII, GB2312, Unicode , UTF-8区别

    ASCII 是一种字符集,包括大小写的英文字母.数字.控制字符等,它用一个字节表示,范围是 0-127 Unicode分为UTF-8和UTF-16.UTF-8变长度的,最多 6 个字节,小于 127 ...

  6. ANSI,ASCII,Unicode的区别与联系!

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

  7. UTF8,Unicode 的区别(zt)

    UTF8并不算是一种电脑编码,而是一种储存和传送的格式,如前所述,每个Unicode/UCS字符都以 2或4个bytes来储存,看看以下的比较:    以"I am Chinese" ...

  8. TCHAR的作用、typedef简介和ASCII,ANSI与Unicode的区别与联系

    1.编码 ASCII 码使用指定的7 位二进制数组合来表示128 种可能的字符.标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到 ...

  9. UniCode与非UniCode的区别

    在数据库中我们通常会遇到字符串与Unicode字符串,对于想我这样的初学者很多人是有很多疑问的,对此我把这个问题整理一下,方便自己与大家对知识的掌握. 字符串:(1)Char:固定长度,长度为n个字节 ...

最新文章

  1. azure devops中文显示乱码_【Azure DevOps系列】Azure DevOps生成代码覆盖率
  2. laravel框架中文手册_Laravel框架的这些你都懂的话,它核心架构基本就懂了
  3. 如何查找两个列表之间的差异?
  4. PMCAFF微课堂 (已结束)| 京东平台产品负责人:如何打造一个支撑3200万日订单量的平台型产品
  5. C++ 数值的整数次方 (最小int取反,递归实现乘方)
  6. matlab中的lower,请问:MATLAB中,有实现Gabor变换的函数吗?
  7. 数据湖,已成为海量数据存储与分析的重要承载方式
  8. 【Android】自定义 Tabhost
  9. WDS系列之四:自定义安装映像
  10. JSF通过EL读取List中的值
  11. 极速办公(word)字体如何设置为斜体
  12. 通达信最新 行情服务器,【图】2021年通达信新的高级行情服务器IP_股票,炒股,炒股公式,股票指标,股票论坛_股票软件技术交流论坛_理想论坛 - 股票论坛...
  13. eighth day for learning
  14. GCC编译器中三个重要的函数
  15. 盘点2018程序员才懂的100个段子/搞笑图(上篇)
  16. android10管理权限,Android 权限管理
  17. 【音视频基础】(六):CIE颜色空间二之CIE-XYZ及Y的含义
  18. Dendro NH2-PEG-Dendro NH2,Dendro Amine-PEG-Dendro Amine,PEG超支化树状胺
  19. 《生命不息,折腾不止》 罗永浩著
  20. 基于TDOA的chan算法(定位算法)

热门文章

  1. HBuilder git使用-建立仓库,邀请用户
  2. vue2.0中ckeckbox(复选框)的使用心得,及对click事件和change的理解
  3. Mac OS X 显示和隐藏文件
  4. 2016年百度面试题
  5. 表单验证之validform.js使用方法
  6. Call to undefined function imagettftext()解决方法
  7. JS判断UA动态加载CSS的方法
  8. matlab 局部图放大或缩小
  9. 【思维】javascript选择排序
  10. Linux中的同步机制