一、字符编码
字符编码指的是字符转换成/编码成数字
编码的过程一定要遵循一个标准,该标准称之为字符编码表
字符---------------------编码-------------------------->>数字
字符<<-------------------解码----------------------------数字
-
ASCII表:只能识别英文字符,用8bit(8个二进制位)对应一个英文字符
1个英文字符====>1Bytes
-
GBk表:可以识别中文字符、英文字符、用8bit对应一个英文字符,用16个bit对应一个中文字符
1个英文字符====>1Bytes
1个中文字符====>2Bytes
-
unicode(内存中默认使用该编码):用2Bytes表示一个字符
可以识别万国字符
与各种字符编码的二进制数字都有对应关系
-
utf-8全称Unicode Transformation Format:
1个英文字符====>1Bytes
1个中文字符====>3Bytes
结论:
-
编码与解码
字符-----------------编码------------------------>>数字
字符<<---------------解码-------------------------数字
unicode二进制编码==>>utf-8二进制
unicode二进制<<解码==uft-8二进制
-
内存中固定使用unicode编码、我们可以改变的是数据由内存刷到硬盘时采用的编码(应该采用utf-8)
unicode的特点:
可以识别万国字符
与各种字符编码的二进制数字都有对应关系
-
解决乱码问题的核心:
字符当初以什么编码存的、就应该以什么编码去读
保证运行python程序的前两个阶段不乱码的解决方案:添加文件头
在文件首行添加coding:文件当初存的字符编码
-
python 解释器默认的编码
python3:默认utf-8
python2:默认ASCII
-
python3的字符串类型在内存中存成unicode格式的二进制
补充
x = '上' #unicode的二进制------编码encode------->gbk格式的二进制 res = x.encode('gbk') print(res,type(res)) #b'\xc9\xcf' <class 'bytes'> #unicode的二进制<------解码decode-------gbk格式的二进制 m = res.decode('gbk') print(m) #上