day1-单位转换、byte、字符编码与转码
一、单位转换
计算机中能表示的最小单位,是一个二进制位(bit)
计算机中能存储的最小单位,是一个二进制位(bit)
8bit = 1byte(字节)
1024byte = 1kbyte
1024kbyte = 1mbyte
1024mb = 1gb
1024gb = 1T
二、字符编码
1. ASCII:美国标准信息交换代码,其最多只能用 8 位来表示,即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号(一个字符占1个字节8个比特位)
2. ASCII与中文
ASCII
gb2312 7445 嵌入式设备
gbk 2w+ pc
gb18030 27xxx
从ASCII、GB2312、GBK 到GB18030,这些编码方法是向下兼容的
3. Unicode:统一码、万国码、单一码,是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定所有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,可能有更多字节。
4. UTF-8:对Unicode编码的压缩和优化,是Unicode的扩展集,它不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:
报错:ascii码无法表示中文
1 #!/usr/bin/env python 2 print "你好,世界"
改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 print "你好,世界"
三、pyc
pyc 预编译后的字节码文件,完成度低,与Python文件的时间作比较进行更新
四、bytes
bytes类型-->二进制数据类型
1. python2 认为bytes类型与字符串类型一样,python3 文本总是unicode,由str类型表示
2. 字符串可以编码成字节包,而字节包可以解码成字符串,python3 数据传输必须转换成二进制(socket)
转换:
字符串-encode-字节
字节-decode-字符串

五、字符编码与转码

此图仅适用于python2
utf-8 转成 gbk
s.decode("utf-8").encode("gbk")
解释:将s转换成unicode,此时需声明它之前是utf-8,然后转成gbk,需声明它现在要转换的编码
需知:
1.在python2默认编码是ASCII, python3里默认是unicode
2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间
3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string
1 #-*-coding:utf-8-*- 2 #Python2 3 4 import sys 5 print(sys.getdefaultencoding()) 6 7 msg = "我爱北京天安门" 8 msg_gb2312 = msg.decode("utf-8").encode("gb2312") 9 gb2312_to_gbk = msg_gb2312.decode("gbk").encode("gbk") 10 11 print(msg) 12 print(msg_gb2312) 13 print(gb2312_to_gbk) 14 15 ascii 16 我爱北京天安门 17 我爱北京天安门 18 我爱北京天安门
1 #-*-coding:gb2312 -*- 2 #python3 3 4 import sys 5 print(sys.getdefaultencoding()) 6 7 msg = "我爱北京天安门" 8 #msg_gb2312 = msg.decode("utf-8").encode("gb2312") 9 #默认就是unicode,不用再decode,喜大普奔 10 msg_gb2312 = msg.encode("gb2312") 11 gb2312_to_unicode = msg_gb2312.decode("gb2312") 12 gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8") 13 14 print(msg) 15 print(msg_gb2312) 16 print(gb2312_to_unicode) 17 print(gb2312_to_utf8) 18 19 utf-8 20 我爱北京天安门 21 b'\xce\xd2\xb0\xae\xb1\xb1\xbe\xa9\xcc\xec\xb0\xb2\xc3\xc5' 22 我爱北京天安门 23 b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'

浙公网安备 33010602011771号