UNICODE是万能编码,包含了所有符号的编码,它规定了所有符号在计算机底层的二进制的表示顺序。有关Unicode为什么会出现就不叙述了,Unicode是针对所有计算机的使用者定义一套统一的编码规范,这样计算机使用者就避免了编码转换的问题。Unicode定义了所有符号的二进制形式,也就是符号如何在计算机内部存储的,而且每个符号规定都必须使用两个字节来表示,也就是用16位二进制去代表一个符号,这样就导致了一个问题,英文编码的空间浪费,因为在ANSI中的符号都是一个字节来表示的,而使用了UNICODE编码就白白浪费了一个字节。也就代表着Unicode需要使用两倍的空间去存储相应的ANSI编码下的符号。虽然现在硬盘或者内存都很廉价,但是在网络传输中,这个问题就凸显出来了,你可以这样想想,本来1M的带宽在ANSI下可以代表1024*1024个字符,但是在Unicode下却只能代表1024*1024/2个字符。也就是1MB/s的带宽只能等价于512KB/s,这个很可怕啊。所以为了解决符号在网络中传输的浪费问题,就出现了UTF-8编码,Unicode transfer format -8 ,后面的8代表是以8位二进制为单位来传输符号的,但是这样又导致了一个问题,虽然UTF-8可以使用一个字节来表示ANSI下的符号,但是对于其它类似汉语的符号,得需要两个字节来表示,所以计算机不知道如何去截取一个符号,也就是一个符号对应的二进制的截取开始位置和截取结束位置。所以为了解决Unicode下的ANSI符号的空间浪费和网络传输下如何截取字符的问题,UTF规定:如果一个符号只占一个字节,那么这个8位字节的第一位就为0。如果为两个字节,那么规定第一个字节的前两位都为1,然后第一个字节的第三位为0,第二个字节的前两位为10,然后如果是三个字节的话,那么第一个字节的前三位为111,第四位为0,剩余的两个字节的前两位都为10。按照这样的算法去思考一个中文字符的UTF-8是怎么表示的:一个中文字符需要两个字节来表示,两个字节一共是16位,那么UTF-8下,两个字节是不够的,因为两个字节下,第一个字节已经占据了三位:110,然后剩余的一个字节占据了两位:10,现在就只剩下8位,与Unicode下的两个字节,18位去表示任意一个字符是相悖的,也就是Unicode下的18位减去UTF-8下的8位=8位,刚好差了一个字节的空间,所以就使用三个字节去表示非ANSI字符:三个字节下,一共是24位,第一个字节头四位是:1110,后两个字节的前两位都是:10,那么24位-8位=16位,刚好两个字节去表示Unicode下的任意一个非ANSI字符。这也就是为什么UTF-8需要使用三个字节去表示一个非ANSI字符的原因了!

多个字节提供的位数超过了所需要的,多余的位以0补全到编码前面

最新文章

  1. Windows Server 2008 R2 主域控制器委派DNS到子域控控制器
  2. 炉石传说 C# 设计文档(序)
  3. [办公自动化]skydrive onedrive
  4. STL底层数据结构实现
  5. 让Visual Studio 2015 支持ASP.NET MVC4.0.0.1
  6. [leetcode] 405. Convert a Number to Hexadecimal
  7. ICOMOON!强悍的WEB字体图标制造器/Web字体使用实例
  8. C语言头文件组织
  9. java单链表代码实现
  10. 使用清华源替代Ubuntu源
  11. windows -休眠
  12. j旧学习
  13. 计算1至n中数字X出现的次数【math】
  14. Linux系统开发之路 - 下
  15. maven搭建ssh项目及遇到的问题
  16. ADO与ADO.Net
  17. 20145226夏艺华 《Java程序设计》预备作业3
  18. 编写高质量代码改善C#程序的157个建议——建议81:使用Parallel简化同步状态下Task的使用
  19. VC6.0 如何显示代码行号
  20. Java bean 是个什么概念?

热门文章

  1. python-seaborn绘图
  2. systemtap执行过程中报probe timer.profile registration error
  3. 递归的可视化(Fibonacci)
  4. uva1153 Keep the Customer Satisfied
  5. Zend studio 修改编码格式
  6. 【软件构造】第三章第四节 面向对象编程OOP
  7. ASP.NetCore 错误 NU1605 检测到包降级: Microsoft.Data.Sqlite 从 2.2.1 降级到 2.1.0
  8. JS数组专题1️⃣ ➖ 数组扁平化
  9. 用户管理命令--passwd,usermod,userdel
  10. mysql5.7zip安装