字符

信息的存储单位:位(bit)–>字节(Byte=8bit,已经可以表示所有的英语符号)–>字符(char=2Byte) 1K =1024byte 1M = 1024K G T P

字节是电脑最小的处理单元 一个字节:0x01

字符:也是一个信息单位,它是各种文字和符号的总称.比如人类 各国看得懂的文字,符号,图形符号,数字.

字符编码:是指对于字符集中的字符,将其编码为特定的二进制数,以便计算机处理.

解码:将计算机处理后的二进制信息,转换成人类看得懂的字符.

字符集和字符编码往往被认为是同文义的概念.ASCII字符编码既表示了字符集也表示了的对应的字符编码.

ASCII字符集:共有128个字符(美国,本身只需要一个字节),包含显示字符(英文大小写,阿拉伯数字)和控制字符(回车,空格键)

GB2312字符集:中国标准的简体中文字符集,其中还有一个中国的GBK字符集

Unicode字符集:世界各国语言中使用到的所有字符.用了4个字节,2个字符.汉字’严’的Unicode编码是十六进制数4E25,转化成二进制有15位

UTF-8:是一种针对Unicode的可变长度字符编码,它使用一到四个字节来表示字符.ASCII字符继续用一个字节表示.中文可能用到4个字节.

先来一个关于简单的ASCII字符集,解码和编码的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
a = 12
b = oct(a)
print(b) #0o14
# 为了将整数转换为二进制,八进制或十六进制的文本串,可以分别使用bin(),oct()或hex()
# 如果你不想输出0b,0o或者0x的前缀的话
# 可以使用format()函数.比如:format(x, 'b') 'o' 'x'
# 编码 虽然没有用encode()方法
print([n for n in b'ahello'])#[97, 104, 101, 108, 108, 111]
# 索引和迭代动作返回的是字节的值而不是字节字符串
# 编码与解码
print([int(n).to_bytes(1,'big').decode('utf-8') for n in b'ahello'])
# 成功 所以说再次证明 电脑最小的操作单位是字节 ,而不是字节的值这是人看得懂的
# ['a', 'h', 'e', 'l', 'l', 'o']

中文字符集的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
print(sys.getdefaultencoding())#utf-8
c ='严'.encode('utf-8')#b'\xe4\xb8\xa5'
print(b'\xe4\xb8\xa5'[0])#228
print(len(c))# 3个字节
print(c.decode())# 严
# 字节的低位高位排列方式 big从低到高 little从高到低
from idna import unicode
unicode(b'\xe4\xb8\xa5','utf-8')
# 解码
# 多个字节的解码转换出来的 数字不太理解 虽然也是十进制的
print(int().from_bytes(c, 'little')) #10860772
# 将字节byte转换为整数 并指定字节顺序
print(int().from_bytes(c, 'big')) # 14989477
print('--------------------') # 14989477
# 编码
print(int(10860772).to_bytes(3, 'little'))
# b'\xe4\xb8\xa5'
print(int(14989477).to_bytes(3, 'big').decode('utf-8'))
# b'\xe4\xb8\xa5'
# 为了将一个大整数转换为一个字节字符串,使用 int.to_bytes() 方法
# 并像下面这样指定字节数和字节顺序
print(int(14989477).to_bytes(3, 'big'))
# b'\xe4\xb8\xa5'
print(int(14989477).to_bytes(8, 'big'))
# b'\x00\x00\x00\x00\x00\xe4\xb8\xa5'

u’’ –> str

1
2
s = '\u6211'
s = s.encode('utf-8').strip().decode()
Share Comments