Python3

计算机采用 8 bit(比特,计算机最小表示单位) = 1 byte(字节,计算机最小存储单位),一个字节能表示的最大的整数就是 255(二进制11111111 = 十进制255),如果要表示更大的整数,就必须用更多的字节,比如两个字节可以表示的最大整数是 65535 。

ASCII (8位)编码包括大小写英文字母、数字和特殊字符,总共256(255+数字0,一共256)个。

中文编码格式的发展历程是在 ASCII 的基础之上经历了 GB2312(7K+)、GBK1.0(2W+)和 GB18030(27W+)。

Unicode (16位)把所有语言都统一到一套编码里,解决了乱码的问题,但造成了存储空间和网络传输的浪费,因此 Unicode 转化成了可变长编码的 UTF-8 编码。Python3 源码文件默认使用 UTF-8 编码,可以正常解析中文,无需指定 UTF-8 编码。

ASCII编码 GBK编码 Unicode编码 UTF-8编码
英文 1btye 1btye 2byte 1byte
中文 N/A 2byte 2byte 3byte

Python2 中默认的编码格式是 ASCII,因此需要指定字符编码才能支持中文。字符串默认也是 ASCII ,如果代码文件头声明了其它编码格式(如 GBK),那字符串就使用声明的编码格式,在内存中不会自动转成 Unicode。

Python3 中默认的编码格式是 UTF-8。字符串的编码格式是 Unicode,即使代码文件头声明了其它编码格式,在内存中也会转换为 Unicode。

Windows 系统中文版默认编码是 GBK,Linux 系统默认编码是 UTF-8。

# Python2指明编码格式:
# -*- coding:utf-8 -*-

计算机系统通用的字符编码工作方式:
在计算机内存中,统一使用 Unicode 编码,当需要保存到硬盘或者需要网络传输的时候,就转换为 UTF-8 编码。无论以什么编码在内存中显示字符,最终保存到硬盘上都是二进制(不同编码转成的二进制不同)。存储和读取的编码必须都要保持一致。

ASCII 转二进制的过程
把字符串拆分成单个字符,对照 ASCII 表把单个字符转成十进制,再把十进制转成二进制,每个字符最终转换成二进制后都是由 8 位的规则来组成的,不足 8 位的在二进制的左边补零从而成 8 位。

ASCII转二进制
ASCII码十进制二进制
Python 80 121 116 104 111 11001010000 01111001 01110100 01101000 01101111 01101110

可以使用 ord() 和 bin() 函数进行验证

# 字符对应的十进制整数
>>> ord('P')
80
>>> ord('y')
121
>>> ord('t')
116
>>> ord('h')
104
>>> ord('o')
111
>>> ord('n')
110
#十进制整数对应的二进制
>>> bin(80)
'0b1010000'
>>> bin(121)
'0b1111001'
>>> bin(116)
'0b1110100'
>>> bin(104)
'0b1101000'
>>> bin(111)
'0b1101111'
>>> bin(110)
'0b1101110'

原文地址:https://www.cnblogs.com/lipandeng/p/11151940.html