编码的进阶

编码的进阶

  • ASCII码:包含英文字母,数字,特殊字符与01010101对应关系。

  a 01000001 一个字符一个字节表示。

  • GBK:只包含本国文字(以及英文字母,数字,特殊字符)与0101010对应关系。

  a 01000001 ascii码中的字符:一个字符一个字节表示。

  中 01001001 01000010 中文:一个字符两个字节表示。

  • Unicode包含全世界所有的文字与二进制0101001的对应关系。

  a 01000001 01000010 01000011 00000001

  b 01000001 01000010 01100011 00000001

  中 01001001 01000010 01100011 00000001

  • UTF-8:包含全世界所有的文字与二进制0101001的对应关系(最少用8位一个字节表示一个字符)。

  a 01000001 ascii码中的字符:一个字符一个字节表示。

  To 01000001 01000010 (欧洲文字:葡萄牙,西班牙等)一个字符两个字节表示。

  中 01001001 01000010 01100011 亚洲文字;一个字符三个字节表示。

  1. 不同的密码本之间能否互相识别?不能。

  2. 数据在内存中全部是以Unicode编码的,但是当你的数据用于网络传输或者存储到硬盘中,必须是以非Unicode编码(utf-8,gbk等等)。

  • 英文:

    str: 'hello '

    ​ 内存中的编码方式: Unicode

    ​ 表现形式: 'hello'

    bytes :

    ​ 内存中的编码方式: 非Unicode

    ​ 表现形式:b'hello'

中文:

​ str:

​ 内存中的编码方式: Unicode

​ 表现形式:'中国'

​ bytes :

​ 内存中的编码方式: 非Unicode # Utf-8

​ 表现形式:b'\xe4\xb8\xad\xe5\x9b\xbd'

# str ---> bytes\
# s1 = '中国'
# b1 = s1.encode('utf-8')  # 编码
# print(b1,type(b1))  # b'\xe4\xb8\xad\xe5\x9b\xbd'
# # b1 = s1.encode('gbk')  # 编码  # b'\xd6\xd0\xb9\xfa' <class 'bytes'>
# # bytes---->str
# b1 = b'\xe4\xb8\xad\xe5\x9b\xbd'
# s2 = b1.decode('utf-8')  # 解码
# print(s2)
# gbk ---> utf-8
b1 = b'\xd6\xd0\xb9\xfa'
s = b1.decode('gbk')
# print(s)
b2 = s.encode('utf-8')
print(b2)  # b'\xe4\xb8\xad\xe5\x9b\xbd'

posted @ 2020-05-18 16:06  爱浪的跳蚤  阅读(128)  评论(0编辑  收藏  举报