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补全到编码前面

python中utf8占几个字节_为什么utf8占用3个字节相关推荐

  1. python中int占几个字节_Python中int占几个字节

    Python中int占几个字节 以python3版本为例说明, int 类型在python中是动态长度的.因为python3中int类型是长整型,理论支持无限大的数字,但它的结构其实也很简单, 在 l ...

  2. python中字符串类型的encode()方法_第五章 Python字符串常用方法详解

    5.1 Python字符串拼接(包含字符串拼接数字) 在 Python中拼接(连接)字符串很简单,可以直接将两个字符串紧挨着写在一起,具体格式为: strname = "str1" ...

  3. 创建二维数组 以及 python中[0 ]* n与[0 for _ in range(n)]的区别与联系

    一.浅拷贝于深拷贝 关于浅拷贝于深拷贝:Python 的深拷贝和浅拷贝 直接赋值:其实就是对象的引用(别名). 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象. 深拷贝(deepcopy) ...

  4. python中浮点型占几个字节_Python基本数据类型

    一.简介 Python基本数据类型一般分为:数字.字符串.列表.元组.字典.集合这六种基本数据类型. 其中数字又包含整型(整型又包括标准整型.长整型(Python2.7及之前版本有)).浮点型.复数类 ...

  5. python中int占几个字节_Python中的整型占多少个字节?

    说到计算机中的整型,相信很多人都会联想到32位整型(或者int),是程序员日常生活中用的最多的一种类型.32位整型顾名思义,占用32个位也就是4个字节,取值范围−2,147,483,648~ 2,14 ...

  6. python中int占几个字节_python int占几个字节

    <深入理解计算机系统>这本书上面提到了在32位机器和64机器中int类型都占用4个字节.<The C Programming language>这本书,里面有一句话是这样的:E ...

  7. python中控制代码块逻辑关系_一、Python基础知识

    1.1 Python简介 (1)解释型语言 解释型语言在运行程序的时候才逐行翻译.运行. ①优点: 有良好的平台兼容性,在任何环境中都可以运行(安装了解释器)灵活,修改代码的时候直接修改就可以,可以快 ...

  8. python中gbk字符原因报错_深入理解Python中的字符和编码,结合,了解,与

    一.前言 在学习python初期,常常会对运行文件出现的各种"codec"报错摸不着头脑有没有? 对各种编码方式的区别和适用的情况混淆有没有? 对python2,python3 编 ...

  9. python中heapq的库是什么_详解Python中heapq模块的用法

    详解Python中heapq模块的用法 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  详解Python中heapq模块的用法.txt ] (友情提示:右键点上行t ...

  10. python中gbk字符原因报错_不想再被鄙视?那就看进来! 一文搞懂 Python 2 字符编码...

    原标题:不想再被鄙视?那就看进来! 一文搞懂 Python 2 字符编码 程序员都自视清高,觉得自己是创造者,经常鄙视不太懂技术的产品或者QA.可悲的是,程序员之间也相互鄙视,程序员的鄙视链流传甚广, ...

最新文章

  1. C#在WinForm中实现清空指定类型控件的内容
  2. 探寻阿里云服务器迈入2.0时代的技术要点
  3. 【《Objective-C基础教程 》笔记】(八)OC的基本事实和OC杂七杂八的疑问
  4. Win32 汇编要点总结
  5. flask中的CBV , flask-session在redis中存储session , WTForms数据验证 , 偏函数 , 对象里的一些小知识...
  6. 恶搞c语言程序设计,C语言编程学习:让人绝望的C语言恶搞小程序(二)
  7. 【kafka】 Error when handling request Name: FetchRequest cannot compare its segment info since it only
  8. LightOJ 1319 Monkey Tradition(中国剩余定理)
  9. 张东:大数据时代挑战与解决之道
  10. openmeetings(开源视频会议系统)的详细安装步骤 (windows版)
  11. Oracle学习方法
  12. 关关php采集插件,推荐使用:关关采集器(杰奇全版本通用编码版)v3.5.00
  13. 很全的ABAP入门资料
  14. 2007年日历带农历表_2007年日历表,2007年农历表(阴历阳历节日对照表)
  15. RESTful的特点分析
  16. 读书笔记:《枪炮、病菌与钢铁》与《1984》
  17. HC-SR04模块初始化
  18. 综合业务数字网ISDN
  19. 沈阳师范大学大一上册C语言PTA题目集以及答案(第五章 函数 编程题篇)
  20. 决策树ID3、C4.5、CART算法

热门文章

  1. Leetcode 226. 翻转二叉树 (每日一题 20210819)
  2. Leetcode 64 最小路径和 (每日一题 20210721)
  3. MATLAB实战系列(十五)-在matlab中如何实现Octave工具包的全自动加载?
  4. 用Tableau画可调整的树状图(Tree Diagram)
  5. access根据所属院系修改学号_五个access管理系统实用范例整合
  6. 虚拟鼠标代替安卓触屏_iQOO对比黑鲨2:那个虚拟按键设计更好?
  7. 实战项目五:抓取简书文章信息
  8. QTexe软件设置系统默认的图标
  9. 1.25亿用户以后,Netflix总结的系统高可用经验
  10. tomcat指定配置文件路径方法