计算机编码的初识
⾸先来说,编码即是密码本,编码记录的就是⼆进制与⽂字之间的对应关系,现存的编码本有:ASCII码:包含英⽂字母,数字,特殊字符与01010101对应关系:共127个字符,使⽤7位⼆
进制表⽰,扩展⼀位,共256个字符
a 01000001 ⼀个字符⼀个字节表⽰。即⼋位⼆进制数
GBK:只包含中国汉字以及英⽂,数字特殊字符与01010101对应关系:
a 01000001 ASCII码中的字:⼀个字符⼀个字节表⽰
中 01001001 01000010 中⽂:⼀个字符两个字节表⽰。
Unicode:包含全世界所有的⽂字与⼆进制01010101的对应关系
a 01000001 01000001 01000001 01000001
中 01001001 01001001 01001001 01001001
UTF-8 包含全世界所有的⽂字与⼆进制01010001的对应关系(最少⽤8位⼀个字节表⽰⼀个字符)。
a 01000001 ASCII中的字符,⼀个字符⼀个字节表⽰
To 01000001 01000010 (欧洲⽂字:葡萄⽛,西班⽛等)⼀个字符两个字节表⽰
unicode编码转换二进制
中 01001001 01000010 01100011 亚洲⽂字:⼀个字符三个字节表⽰
为防⽌转换出现乱码,数据在内存中全部是Unicode编码的,可以识别⼏乎全部的⽂字。
但是Unicode⼀个字符需要4个字节,占⽤空间⼤,当数据⽤于⽹络传输或者存储到硬盘
中,必须是⾮Unicode编码。
# python3X 以 str为例,模拟将⼀句话通过⽹络发给对⽅
# content就是那句话. 内存中的编码⽅式:Unicode。⾸先转化为⾮Unicode再传输和存储
# content = input(">>>")
# print(content)
# bytes ,属于字符串表现形式:b"str"
# b = b"hello"
# print(b, type(b))  # b'hello' <class 'bytes'>
# b = b"中国"
# print(b, type(b))  # SyntaxError: bytes can only contain ASCII literal characters.
# str ---> bytes
s1 = "中国"
b1 = s1.encode("utf-8")  # encode 编码
print(b1, type(b1))  # b'\xe4\xb8\xad\xe5\x9b\xbd' <class 'bytes'>. utf-8 三个字节⼀个汉字
# bytes --->str
b2 = b'\xe4\xb8\xad\xe5\x9b\xbd'
s2 = b2.decode("utf-8")  # decode 解码
print(s2, type(s2))
# str ---> bytes
s3 = "中国"
b3 = s3.encode("GBK")  # encode 编码
print(b3, type(b3))  # b'\xd6\xd0\xb9\xfa' <class 'bytes'>.  中⽂GBK两个字节⼀个汉字
# bytes --->str
b4 = b'\xd6\xd0\xb9\xfa'
s4 = b4.decode("GBK")  # decode 解码
print(s4, type(s4))