进制和编码

目标:了解计算机中一些必备的尝试知识,了解常见名词背后的意义

1.python的运行方式

  • 交互式运行
  • 脚本式运行

2.进制

2.1 进制的转换

计算机中底层的所有数据都是0101010101的形式存在的

八进制无法直接转为2进制

  • 十进制转其他进制
bin(25) # 10进制转为2进制
oct(25) # 10进制转为8进制
hex(25) # 10 进制转为16 进制

输出的结果都是字符串类型的结果

  • 其他进制转为十进制
int('0b11001', base=2) 2进制转为10进制
int('0o31', base=8) 8进制转为10进制
int('0x19', base=16) 16进制转为10进制

由于计算机中本质上所有的东西都是二进制进行存储和操作的,所以产生了计算机的单位。

  • b(bit),位
1,1位
10,2位
111,3位
1001,4位
  • B(byte),字节
8位数是一个字节
10001000,1个字节
10001000 10001000 2个字节
  • KB(kilobyte),千字节
1024个字节=1千字节
1kb=1024B=1024*8b
  • M(Megabyte)兆
1024KB = 1M = 1024*1024 B 1024*1024*8 b

G(Gigbyte),千兆

1G = 1024 M =1024*1024KB = 1024*1024*1024 B = 1024*1024*1024*8 b
  • T (Terabyte),万亿字节
1T = 1024G

4.编码

编码,文字和二进制之间的一个对照表

4.1 ASCII编码

ASCII规划使用一个字节表示字母与二进制对应关系
进制和编码_第1张图片

4.2 GB-2312编码

gb-2312编码,由国家信息标准委员会制作(1980年)

gbk 编码,对gb2312进行扩展,包含了中日韩等文字(1995年)。

在与二进制做对应关系时,由如下逻辑:

  • 单字节表示,用一个字节表示对应关系。2**8 =256
  • 双字节表示,用两个字节表示对应关系。2**16 =65536种可能性

4.4 Unicode

Unicode 也被称为万国码,为全球的每个文字都分配了一个码位

  • Ucs2
用固定的2个字节表示一个文字
  • Ucs4
用固定的4个字节表示一个文字

无论是ucs2和ucs4都有一个问题就是浪费空间

文字	  十六进制	二进制 
冯  		51AF 	101000110101111 
冯		51AF	01010001 10101111 					ucs2 	
冯		51AF	00000000 00000000 01010001 10101111 ucs4

unicode的应用:在文件存储和网络传输时,不会直接使用Unicode,而在内存中会使用Unicode的

4.4 utf-8编码

包含所有的文字和二进制的对应关系,全球应用范围最为广泛的一种编码形式(站在巨人肩膀上工程名就)

本质上:utf-8是对Unicode编码的压缩,用尽量少的二进制与文字进行对应

Unicode码范围		UTF-8
0000 - 007F			用一个字节表示
0080 - 07FF 		用两个字节表示
0800 - FFFF 		用三个字节表示
10000 - 10FFFF 		用四个字节表示

压缩流程

  • 第一步:选择转换模版
码位范围(16进制)		转换模版
0000 - 007F				0xxxxxxx
0080 - 07FF 			110xxxxx 10xxxxxx
0800 - FFFF 			1110xxxx 10xxxxxxx 10xxxxxx
10000 - 10FFFF			11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

注意:一般中文都使用第三个模版(三个字节),这也就是大家说中文在UTF-8中会占三个字节的原因了

  • 第二步:在模版中填入数据
冯 -》51AF-》101 000110 101111 
根据模版去套入数据
1110xxxx 10xxxxxxx 10101111 
1110xxxx 10000110 10101111 
11100101 10000110 10101111 
在utf-8 编码中"武"的编码为  11100101 10000110 10101111 

4.5 Python中的编码

字符串(srt)    "yujinlong"    unicode 	一般用于内存
字节(byte)					utf-8 or gbk  一般用于文件和网络 
text = 'yuijnlong2002'
data = text.encode('utf-8')
# 打开一个文件
file = open('yujinlong.txt', mode='wb')
# 写入字符串
file.write(data)
# 关闭文件 
file.close()

你可能感兴趣的:(lf,数据库,开发语言)