python3随记——字符编码
1.1什么是字节
字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。
比特(bit)在计算机中最小的单位,在二进制位的电脑的系统中,每一bit,表示0或1 ,的数字信号。
1.1.1在不同字符编码的字节表示
- ASCII码:一个英文字母(不分大小写)占一个字节(1B)的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算成10进制,最小值0,最大值255.
- utf-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于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的实现方式,这是为传输而设计的编码,并使编码无国界,这样就可以显示全世界上所有文化的字符了。
更新中。。。。。
python3随记——字符编码的更多相关文章
- day008 字符编码之 字符编码 、Python2和Python3字符编码的区别
计算机基础(掌握) 启动应用程序的流程 双击qq 操作系统接受指令然后把该操作转化为0和1发送给CPU CPU接受指令然后把指令发送给内存 内存接受指令把指令发送给硬盘获取数据 qq在内存中运行 文本 ...
- python 之字符编码
一 了解字符编码的储备知识 python解释器和文件本编辑的异同 相同点:python解释器是解释执行文件内容的,因而python解释器具备读py文件的功能,这一点与文本编辑器一样 不 ...
- Python常见字符编码间的转换
主要内容: 1.Unicode 和 UTF-8的爱恨纠葛 2.字符在硬盘上的存储 3.编码的转换 4.验证编码是否转换正确 5.Python bytes类型 前 ...
- Python基础之 一 字符编码及转换
python2 / python3编码转换 先上图一张: 说明:python编码转换的流程是 先进行decode解码,然后进行encode编码 解释: u'你好' -->带u表示为unicod ...
- day12 字符编码
计算机基础 启动应用程序 双击QQ 操作系统接受指令然后把该操作转化成0和1发送给CPU CPU接受指令然后把指令发送给内存 内存接受指令把指令发送给硬盘读取数据 QQ在内存中运行 写文本的流程 在记 ...
- 字符编码及字节串bytes类型
1 字符编码简介 ASCII码:美国人发明并使用,用1个字节(8位二进制)代表一个字符,ASCII码是其他任意编码表的子集(utf-16除外). Unicode:包含和兼容全世界的语言,与全世界的语言 ...
- Python3 字符编码
编码 字符串是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节 ...
- 【Python3之字符编码】
一.字符集和字符编码 1.定义 计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的英文.汉字等字符是二进制数转换之后的结果.通俗的说,按照何种规则将字符存储在计算机中,如'a'用什么表示,称 ...
- Python2与Python3字符编码的区别
目录 字符编码应用之Python(掌握) 执行Python程序的三个阶段 Python2与Python3字符串类型的区别(了解) Python2 str类型 Unicode类型 Python3 字符编 ...
随机推荐
- 查看Linux版本信息
如何查看Linux系统使用的版本信息呢? 下面这篇文章收集.整理了一些常见的查看Linux系统版本的方法.由于手头只有Oracle Linux.Centos Linux.Redhat Linux三个版 ...
- Web报表工具FineReport的JS API开发(一)
很多报表软件可以利用JS接口来实现更多更复杂的功能.以FineReport为例,开放了大量的JS API给用户,根据执行JS的主体不同可以将分为三大类:FR.FS和contentWindow. 在js ...
- JS -- 异步加载进度条
今天在博客园问答里面看到博友问道怎么实现Ajax异步加载产生进度条. 很好奇就自己写了一个. 展现效果: 1) 当点击Load的时候,模拟执行异步加载. 浏览器被遮挡. 进度条出现. 实现思路: 1. ...
- linux学习(2)
自从安装了虚拟机和各种工具软件之后,学习Linux的过程不断被打断,一直想把Ubuntu烧录到itop4412开发板里面去,却总是失败,感觉这个过程都加强我的抗打击能力了,现在来说说,对于一个第一次烧 ...
- C#使用正则表达式检测数字 char 和韩文
if (!System.Text.RegularExpressions.Regex.IsMatch(strRoleName[i].ToString(), @"^[\uac00-\ud7ff] ...
- 如何用Maven创建web项目
使用eclipse插件创建一个web project 首先创建一个Maven的Project如下图 我们勾选上Create a simple project (不使用骨架) 这里的Packing 选择 ...
- Path Sum II
Path Sum II Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals ...
- mysql的sql_mode模式
在oracle或sqlserver中,如果某个表的字段设置成not null,insert或update时不给这个字段赋值,比如下面这样: 表t_test(id,name)中id,name都不允许为空 ...
- 网站哀悼变灰代码集合 兼容所有浏览器的CSS变暗代码
下面这些CSS代码可以把网站的网页变为黑白,只需将代码加到CSS文件或网页最顶端就可以实现素装.建议全国站长动起来.为遇难的同胞哀悼. 如何将网站变成灰色调呢,网站变灰色方法是什么?有哪些?为了方便大 ...
- LeetCode:N-Queens I II(n皇后问题)
N-Queens The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no tw ...