python - 2 8 16进制/颜色/字符编码

时间:2021-07-30 15:57:50

1.二进制 八进制 十六进制

二进制: bin() 0b10010
八进制: oct() 0o10
十进制: 1-100
十六进制: hex() 0X53 BH

十进制转2, 8,16进制:

>>> bin(144)
'0b10010000'
>>>
>>> oct(8)
'0o10'
>>>
>>> hex(15)
'0xf'
>>>
>>> chr(97)
'a'

A=65 a=97 0=48 //ASCII

-------------------------------------------------------------------
2.python颜色:

我们可以通过对有用的信息设置不同颜色来达到醒目的效果,linux终端中的颜色是用转义序列控制的,转义序列是以ESC开头,可以用\033完成相同的工作(ESC的ASCII码用十进制表示就是27,等于用八进制表示的33)

格式:\033[显示方式;前景色;背景色m

说明:
前景色 背景色 颜色
---------------------------------------
30 40 黑色
31 41 红色
32 42 绿色
33 43 黃色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色

显示方式 意义
-------------------------
0 终端默认设置
1 高亮显示
4 使用下划线
5 闪烁
7 反白显示
8 不可见

例子:
\033[1;31;40m <!--1-高亮显示 31-前景色红色 40-背景色黑色-->
\033[0m <!--采用终端默认设置,即取消颜色设置-->

-------------------------------------------------------------------
3.字符编码:

3.1.英文 符号 数字 与 二进制(数字) 的 关系 ascii
3.2.中文 与 二进制(数字) 的 关系 gbk unicode utf-8
3.3.图片,视频 与 二进制(数字) 的 关系 bytes
---------------------
3.1英文 符号 数字 与 二进制 的关系 ASCII码 8位二进制 2**8=256 0-255
0 --- 48
1 --- 49
A --- 65
B --- 66
a --- 97
b --- 98
例如:
#Alex
51 65 108 101 120
所以:
#Alex 110011 1000001 1101100 1100101 1111000 //一定要断句 8位段 每8位一个字节
#Alex 00110011 01000001 01101100 01100101 01111000 //1个二进制位1个bit(比特)

//单位:
8bit=1bytes=1B
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
1PB=1024TB
1EB=1024PB
1ZB=1024EB
1YB=1024ZB
1BB=1024YB

---------------------
3.2 中文和数字的关系
GB2312 (1981) 6763个 简体
GBK (1995) 21003个 简体 繁体 两个字节
GB18030 (2000) 27484个 简体 繁体 日文 朝鲜语
BIG5 (1984) 13053个 中文 *
Shift-JIS 日本字符
ks_c_5601(1987) 韩国字符
TIS-620 泰国编码

Unicode (1991) (2-4个字节) 造成有些空间浪费 ISO组织的支持全世界所有语言(两个字节 2**16=65536)
UTF-8 对Unicode优化,可变长;英文(ascii码1个字节) 欧洲(2个字节) 东亚(汉语 日语 3个字节)

中国规定:进入中国的软件必须支持GBK
Windows系统默认编码是GBK(两个字节)
Mac 和 linux 是 UTF-8
---------------------
3.2.1
python2 默认编码ASCII码 不支持中文 但你可以声明它 用UTF-8编码
# -*- coding: utf-8 -*- 放在第一行;
# encoding:utf-8
python3 默认编码UTF-8 支持中文
---------------------
3.2.2
Unicode 2-4个字节
1.支持了全球各个国家得语言
2.包含了与所有国家编码得映射关系

Unicode解决了字符和二进制之间得对应关系
UTF-8:可变长得 1 2 3 4 个字节来表示 英文1个字节 中文3个字节 欧洲2个字节
UTF-16: 2,4个字节
UTF-32:4个字节
总结:UTF-8是为unicode编码 设计 得一种 在存储 和传输时节省空间得编码方案

无论以什么编码在内存里显示字符,存在硬盘上 都是二进制
注意:存在硬盘上以何种编码存的,再从硬盘上读出来时,就必须以何种编码读,要不然就乱了。

你写得gbk得“路飞学城”Unicode能自动知道它在Unicode中得“路飞学诚”得编码是什么
由于所有系统 编程语言 都默认支持unicode 那你得gbk软件放到美国电脑上 加载到内存里,变成unicode,中文就可以正常显示了

//总结:
1.所有得系统 Win linux mac 都支持Unicode
2.目前Windows终端以gbk显示 mac linux以utf-8 编码
python3 如果以utf-8编码 到内存里 会自动转成 Unicode
python2 如果以utf-8编码 到内存里 不会转成Unicode 还是utf-8 此时到了windows 上就乱码了
//只有两种情况,windows显示才不会乱:
1.字符串以GBK显示
2.字符串是Unicode编码
---------------------
3.2.3
将python2人肉转成unicode decode(解码) encode(编码)
UTF-8 --> decode 解码 -->Unicode
Unicode --> encode 编码 -->GBK/UTF-8
# -*- coding:utf-8 -*0 //py2
s="路飞学城"
print(s) //会乱码 win
s1=s.decode("utf-8") //将utf-8decode解码解成unicode
print(s1) //不会乱了 win
print(type(s1))
s2=s1.encode("gbk") //将unicode编码转成gbk
print(s2)
s3=s1.encode("utf-8") //将unicode编码转成utf-8
print(s3)
--------------------------
在内存中得unicode,存到硬盘上或网络传输要转成gbk/utf-8 ,utf-8 在存储 和传输时是节省空间得编码方案

总结:
Unicode --> encode 编码 --> GBK中文,Shift-JIS日本编码
GBK -------> decode 解码 --> Unicode
Shift-JIS --> decode 解码 --> Unicode

总结:
1.py3 文件默认编码是 utf-8
字符串编码是 unicode,如果文件头声明了gbk,字符串编码会转成Unicode

2.py2 文件编码是 ascii
字符串编码 默认是ascii,如果文件头声明了gbk,那字符串得编码就是gbk

unicode 单独类型

utf-8 占3个字节 中文
gbk 占2个字节 中文
Unicode 占2个字节 中文
--------------------------
3.2.4
ascii 和 gbk 得关系:
连续两个字节都是高字节得128-255得 就认为是中文 1个字节256 0-127得是英文
128以上得叫高字节 两个连在一起得 就是中文
128以下得叫低字节
Unicode和gbk得对应关系表, 高字节上Unicode就忽略了

---------------------
3.3
图片 视频 与二进制得关系:

bytes通过编码表找到得字形就是字符串;
对于图片和视频没有字符编码 怎么办
图片到内存中 怎么表示图片 图片得二进制流 bytes

在print(一张图片时) 就会乱码 因为解释器找不到对应得字形
就是 python 解释器就会拿着编码表查看 你以什么编码写得程序 找到对应得字形显示出来
--------------------------------------
//总结:
py2:
如何在py2上实现写一个软件 在全球电脑上 都能看?
以unicode编码写你的软件
s=you_str.decode('utf-8')
1.s.decode('utf-8')
2.s=u'路飞'
py2中除了str bytes 还有一种类型 unicode
声明得文件头
py2:以utf-8 or gbk ...编码得代码 代码内容加载到内存 并不会 转成 unicode 编码依然时 utf-8 or gbk
py3:以utf-8 or gbk ...编码得代码 代码内容加载到内存 会被自动转成unicode
py2 类型有 str bytes unicode
py3 类型有 str == unicode

py3:
str 无论你以什么格式编码,在python3里str都是Unicode str=unicode
py3 默认支持了全球

解释一下: 为什么在py2里有 str unicode bytes py3里str就变成了unicode

为什么py2里默认不支持中文得,因为创始人,没有意识到,就用了ascii 后来 多个国家使用 需要支持中文 日文 法语 正好出现了Unicode 但是已经有很多软件 基于ascii 有兼容问题;所以单独引入一个类型 unicode 就可兼容 全球用得越来越多
后期:
1.2008年 python 发展20年 龟叔已经功成名就了 想做得点实事了 python 语言已经不像初衷想得那样,python 应该是一个 简洁 明了 优雅得语言 所以龟叔认为不能像之前那样 修修补补 所以就来了一个大变革 python3横空出世了;
py3 直接 不兼容 py2 py3做了很多得改进 其中之一就是 把字符串变成了unicode,文件默认编码变成了utf-8,相当于存到硬盘上是utf-8,读到内存里是unicode,不想用utf-8存文件,用gbk存 ,到内存里任然是Unicode,所以说,只要用python3开发,无论你的程序那种编码开发得,都可以在全球得电脑上正常显示(全球得电脑都支持Unicode)
2.py3除了把字符串得编码改成了Unicode,还把str和bytes做了明确得区分,str就是Unicode格式得字符,bytes就是单纯得二进制了。

python3里只有Unicode才会打印中文 ,s.encode("gbk")不会打印中文,不会去编码表里找,通过这种方式 就是想告诉别人 py3里看字形,必须是Unicode,其他得编码一律按bytes格式展示了
>>> s='路飞'
>>> type(s)
<class 'str'>
>>> s.encode("gbk")
b'\xc2\xb7\xb7\xc9'
>>> b=s.encode("gbk")
>>> b
b'\xc2\xb7\xb7\xc9'
>>> print(b)
b'\xc2\xb7\xb7\xc9'

py3转换成bytes 干嘛呀 在内存里是Unicode 接下来要存到硬盘上 不能用Unicode存,只能以某种编码存 utf-8 gbk存 或者传到远程,不能以Unicode传,变成二进制,传过去,之后 解码在把它变成Unicode 所以说 编码之后 就为了存储和传输;

最后最后:出了编码问题就是: 无非就是能不能正常展示
1.python解释器得默认编码 是不是 出问题了
2.源文件得文件头 py2得默认编码是ascii ,py3是unicode,
3.文件头得声明和文件内容得编码;创建python文件得时候是以utf-8创建得,文件头却声明了gbk,python解释器会以gbk得形式读你得文件 肯定会出问题得,所以一定要记住 写的时候 是什么编码 文件头声明就是什么编码;
4.转编码得时候,以gbk存得这段代码,不要轻易去修改存文件时得编码,因为转编码是不可逆得
5.terminal 终端 windows是gbk mac是utf-8 操作系统 终端是继承自操作系统得编码,操作系统是什么,它就是什么
6.用不对得编码去解码另外一种编码得数据; 编码没对上

参考:http://www.cnblogs.com/alex3714/articles/7550940.html

--------------------------------------------------------------
总结:
1.2 8 16进制
2.python颜色
3.字符编码