python3随记——字符编码

1.1什么是字节

字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。

比特(bit)在计算机中最小的单位,在二进制位的电脑的系统中,每一bit,表示0或1 ,的数字信号。

 

1.1.1在不同字符编码的字节表示

  1. ASCII码:一个英文字母(不分大小写)占一个字节(1B)的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算成10进制,最小值0,最大值255.
  2. utf-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于3个字节。
  3. unicode编码:一个英文等于两个字节,一个中文(含繁体)等于2个字节。

符号: 英文标点占一个字节,中文的标点占两个字节。例:英文句号"."占一个字节大小,中文句号"。"占两个字节大小。

1.2进制的表示和转换

进制的表示:

二进制: 0 1

8进制 : 0 1 2 3 4 5 6 7 (0-7的组合)(8进制的一位对应2进制的3位,不足3位补位用0表示)

10进制:0-9的组合

16进制:0 1 2 3 4 5 6 7 8 9 A B C D E F(0-F的组合)(16进制的一位对应2进制的4位,不足4位补位用0表示)

 

进制之间的转换:

http://jingyan.baidu.com/article/495ba84109665338b30ede98.html

1.3数据存储和数据传输

数据存储

硬盘厂商是以10进制(即10的3次方=1000,1MB = 1000KB)计算的,而计算机是二进制表示(2的10次方,即1MB = 1024KB)。

在计算机好多1TB的硬盘,在计算机只有

1TB = 1000GB = 1000000MB = 1000000000KB = 1000000000000B  硬盘厂商表示

1TB = 1000000000000B /1024 /1024 /1024 = 931GB   计算机容量表示

1KB=1024B;1MB=1024KB=1024×1024B。其中1024=210。
1B(byte,字节)= 8 bit(见下文);
1KB(Kibibyte,千字节)=1024B= 2^10 B;
1MB(Mebibyte,兆字节,百万字节,简称“兆”)=1024KB= 2^20 B;
1GB(Gigabyte,吉字节,十亿字节,又称“千兆”)=1024MB= 2^30 B;
1TB(Terabyte,万亿字节,太字节)=1024GB= 2^40 B;
1PB(Petabyte,千万亿字节,拍字节)=1024TB= 2^50 B;
1EB(Exabyte,百亿亿字节,艾字节)=1024PB= 2^60 B;
1ZB(Zettabyte,十万亿亿字节,泽字节)= 1024EB= 2^70 B;
1YB(Yottabyte,一亿亿亿字节,尧字节)= 1024ZB= 2^80 B;
1BB(Brontobyte,一千亿亿亿字节)= 1024YB= 2^90 B;
1NB(NonaByte,一百万亿亿亿字节) = 1024 BB = 2^100 B;
1DB(DoggaByte,十亿亿亿亿字节) = 1024 NB = 2^110 B

 数据传输:

数据存储是字节("Byte")为单位,数据传输大多是以“位”("bit",又名“比特”)为单位,一个位就表示0或q(即二进制),每8个位("bit",简写为b)组成一个字节(Byte,简写B),bit是最小一级的信息单位

在计算机中传输的最小单位是信号单位bit ,数字信息流的基本单位是bit,时间的基本单位是s(秒),因此bit/s(比特每秒)是描述宽带的基本单位。

带宽(bps)就是在一个固定的时间内(1秒),能通过的最大位数据。

bps (bit per second)

例: 

有些宽带运营商,一个20Mbps的带宽  ,而实际的最大下载速度大约只有2.5MB/s (这是以每秒多少字节下载,大写B)

20Mb/s = 20 / 8 = 2.5MB/s

1Mb/s = 1024Kb/s =  1024Kb / 8  = 128KB / s  

你的上传速度和下载速度 都是共用你的带宽

 

1.4字符编码

字符编码就是:特定的字符如何对应一个特定的数字标准

1.ASCII编码

  由于计算机是美国人发明的,因此,最早只有128个字母被编码到计算机里,也就是大小写英文字母、数字和一些英文符号,这个编码被称为ASCII码,最初使用的是ASCII码(American  Standared  Code for information  interchange ,美国标准信息交换码)。

 虽然标准ASCII字符集字符数目有限, 但由于计算机基本处理单位为字节(1Byte =1bit ),所以一般 任意一个字节存放一个ASCII字符,每一个字节中多余出来的一位(最高位)在计算机内部通常保持为0(在数据传输是可用做奇偶校验位。)由于标准ASCII字符集数目有限,在实际应用中往往不够用,后来加入了很多画表格时需要用到下划线、竖线、交叉等序号遍到了最后一个状态255,从128到255这一页的字符集称为“扩展字符集”。

2.GBK 、GB18030、GB2312

GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。

GB2312 支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的 GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。

GBK就是汉字编码的规范

从ASCII、GB2312、GBK 到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。

3.unicode编码

全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。

UNICODE 。( Universal Multiple-Octet Coded Character Set )简称UCS

在UNICODE 中,一个汉字算两个英文字符的时代已经快过去了。

无论是半角的英文字母,还是全角的汉字,它们都是统一的“一个字符”!同时,也都是统一的“两个字节"”

请注意”字符”和”字节”两个术语的不同,“字节”是一个8位的物理存贮单元,而“字符”则是一个文化相关的符号。在unicode中,一个字符就是两个字节。一个汉字算两个英文字符的时代已经快过去了。

我们已经知道,英文字母只用一个字节表示就够了,如果unicode统一规定,一个字符都表示两字节这对于存储空间来说是极大的浪费,文本文件的大小会因此大出二倍,这是难以接受的。

4.UTF-8

unicode在很长一段时间内无法推广,直到互联网的出现,为解决unicode如何在网络上传输的问题,于是面向传输的众多 UTF(UCS Transfer Format)标准出现了,顾名思义,UTF-8就是每次8个位传输数据,

UTF-16就是每次16个位。UTF-8就是在互联网上使用最广的一种unicode的实现方式,这是为传输而设计的编码,并使编码无国界,这样就可以显示全世界上所有文化的字符了。

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度,当字符在ASCII 码的范围时,就用一个字节表示,保留了ASCII字符一个字节的编码做为它的一部分,注意的是unicode一个中文字符占2个字节,而UTF-8一个中 文字符占3个字节)。
从unicode到uft-8并不是直接的对应,而是要过一些算法和规则来转换。

更新中。。。。。

转载于:https://www.cnblogs.com/keme/p/6029632.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构之线性查找和折半查找

1、线性查找 比如字符串 char s[] = "chenyu"; 如果我们是线性查找的话,就是从字符‘c’依次到字符串结尾‘u’查找 2、折半查找 注意查找之前必须是有序的 比如整形数组 int a[10] = {1, 2, 7, 9, 10}; 查找数字2 我们可以定义 首和尾巴,拿需要查找的数据和…

盖茨被逐出微软董事会真相曝光:长期跟员工搞地下情,27年婚姻中出轨不断,人设已崩...

全世界只有3.14 % 的人关注了爆炸吧知识转自:量子位作者:梦晨 鱼羊2020年3月,在比尔盖茨辞去微软董事会职务的时候,人们都在感慨一代互联网大拿,纷纷都到了交接班的时候。万万没想到,一年多之后&#xff0c…

Natasha 4.0 探索之路系列(二) 「域」与插件

域与ALC在 Natasha 发布之后有不少小伙伴跑过来问域相关的问题,能不能兼容 AppDomain、如何使用 AppDomain、为什么 CoreAPI 阉割了 AppDomain 等一系列的问题。今天答复一下:首先 AppDomain 作为程序集隔离容器的存在,是风靡了 .NET Framewo…

cake fork什么意思_Java7任务并行执行神器:Forkamp;Join框架

Fork/Join是什么?Fork/Join框架是Java7提供的并行执行任务框架,思想是将大任务分解成小任务,然后小任务又可以继续分解,然后每个小任务分别计算出结果再合并起来,最后将汇总的结果作为大任务结果。其思想和MapReduce的…

php xml常用函数的集合及四种方法

1、DOM 函数 a、DOMDocument->load()作用:加载xml文件用法:DOMDocument->load( string filename )参数:filename,xml文件;返回:如果成功则返回 TRUE,失败则返回 FALSE。 b、DOMDocument-&…

linux C语言之called object ‘maze’ is not a function or function pointer printf(“%d\t“, maze(i, j))

今天写广度优先搜索的时候出现了这个问题, 解决办法: 特么我傻逼了,明显是数组,我写成了mate(i, j),然后我改了写成了mate[i, j]; 特么我又傻逼了 改成mate[i][j] 就可以了

drozer

安装drozer 1. 准备环境 1)JRE / JDK 2) Android SDK 3) Python 2.7 Path, abd和java的环境变量 2. windows 下 安装drozer drozer-installer-2.3.3.zip adb install agent.apk //drozer agent 启动服务端口 adb forward tcp:31415 tcp:31415drozer.bat co…

Greenplum 数据库架构分析

Greenplum 数据库是最先进的分布式开源数据库技术,主要用来处理大规模的数据分析任务,包括数据仓库、商务智能(OLAP)和数据挖掘等。自2015年10月正式开源以来,受到国内外业内人士的广泛关注。本文就社区关心的Greenplu…

Blog.Core高级进阶:共赴五年之约

读书破万卷,下笔如有神。佳著荐大家马上新年好呀,还有七天就是春节了,2022年是真真正正的到来了,老张打算在新的一年里,继续为开源社区做贡献,Blog.Core开源项目也正式进入第五个年头了,是时候作…

stringredistemplate设置过期时间_Redis的过期删除策略和内存淘汰机制

Redis的key可以设置过期时间,那是否意味着时间一到就会马上被删除呢?Redis的数据存储大小是有限的,假如内存不足Redis有什么应对策略呢?本篇文章将介绍一下Redis的过期策略和内存淘汰机制。1、redis的过期策略1.定时删除在设置key…

linux之怎么使vim永久显示行号

1、进入当前用户目录 2、输入下面命令 vim ~/.vimrc 3、退出保存 :x 4、用vim打开文件验证

java.util.ConcurrentModificationException异常

2019独角兽企业重金招聘Python工程师标准>>> <p> 今天遇到了一个小bug&#xff0c;在对ArrayList操作时出现了java.util.ConcurrentModificationException异常。原来是arrary在遍历时&#xff0c;是不能删除其中的对象的。 for(MediaFeedData item : Item…

eclipse中git插件配置 编辑

一、Eclipse上安装GIT插件EGit EGit插件地址&#xff1a;http://download.eclipse.org/egit/updates OK&#xff0c;随后连续下一步默认安装就可以&#xff0c;安装后进行重启Eclipse 二、在Eclipse中配置EGit 准备工作&#xff1a;需要在https://github.com 上注册账号 Prefer…

Oracle 之 管理

启动和停止Oracle停止和启动oracle需要切换到oracle用户才可以&#xff0c;其他用户都没有这个权限运行sqlplus但不登陆到oracle&#xff1a;sqlplus /nolog以系统管理员的权限连接到oracle服务器&#xff1a;conn /as sysdba;启动Oracle&#xff1a;startupOracle的listenerOr…

使用 C# 开发 Kubernetes 组件,获取集群资源信息

写什么呢前段时间使用 C# 写了个项目&#xff0c;使用 Kubernetes API Server&#xff0c;获取信息以及监控 Kubernetes 资源&#xff0c;然后结合 Neting 做 API 网关。体验地址 http://neting.whuanle.cn:30080/账号 admin&#xff0c;密码 admin123本篇文章主要介绍&#xf…

whitelabel error page什么意思_什么是RESTful API?总算能说清楚了

要弄清楚什么是RESTful API,首先要弄清楚什么是REST。REST -- REpresentational State Transfer&#xff0c;英语的直译就是“表现层状态转移”。如果看这个概念&#xff0c;估计没几个人能明白是什么意思。那下面就让我来用一句人话解释一下什么是RESTful:URL定位资源&#xf…

linux之vim怎么跳到指定的一行

刚才用vim的时候&#xff0c;发现光标跳转到指定一行非常方便。 比如我们要跳到文件的80行&#xff0c;输入下面命令 80gg 也可以用G代替gg 80G 我们知道下面这个命令是跳到第一行 gg 下面命令跳转到最后一行 G

【转】Asp.net控件开发学习笔记整理篇 - 数据回传

最近一直在做MVC项目&#xff0c;对于WEBFORM 好像快忘记了。周末无聊&#xff0c;顺带看看他人的笔记。再次温习下。 复习大纲&#xff1a; 导航、页面生命周期及其它导论 一、服务器控件生命周期 二、控件开发基础 三、Asp.net服务端状态管理 四、Asp.net客户端状态管理 五、…