字符编码
-
字符编码:字符编码指的是字符转成/编码成数字(二进制)
编码的过程一定要遵循一个标准,该标准称之为字符编码
字符=======编码=========》数字
字符《======解码========数字
-
文本编辑器打开文本的三个步骤:
-
打开文本编辑器
-
文本编辑器将文本内容读入到计算机内存
-
文本编辑器将文本内容显示到显示屏上
-
-
ASCII码表:只能识别英文字符,用8bit对应一个字符
-
GBK码表:可以识别中文字符和英文字符,用8bit对应一个英文字符,用16 bit对应两个中文字符。
-
Unicode 表:内存中默认使用该编码:用2 bytes表示一个字符。
优势:1.可以识别万国字符
-
与各种字符编码的二进制数字都有对应关系
劣势:任何字符不管是英文还是中文都用2 bytes存储,降低了存储效率,浪费了储存空间
-
-
UTF-8(Unicode transformation format):用1bytes对应一个英文字符,3bytes表示一个中文字符。
结论:
-
编码与解码
字符-------------> 编码(encoding)--------------> 数字
字符<------------- 解码(decoding)<-------------- 数字
unicode 二进制 -------------->编码--------------> utf-8二进制
unicode 二进制<-------------- 编码<-------------- utf-8二进制
-
内存中默认固定使用Unicode编码,我们可以改变的是数据有内存刷到硬盘时采用的编码(应该采用utf-8)
既然utf-8比Unicode精简,那为什么内存中不用utf-8进行中转?
utf-8虽然包含了万国语言,但本质上跟ASCII、gbk一样不能不能对除Unicode编码的文件进行转换,所以为了避免以往用其他编码表编码的文件能够继续运行,所以目前还只能在内存中用Unicode进行解码,随着以后的编码都统一用utf-8,未来可能会有一天内存也可以用utf-8进行编码和解码过程。
-
解决乱码问题的核心:
-
当存字符时用什么编码的,读取时就该以什么编码。
-
保证运行python程序的前两个阶段不乱码的解决方案:添加文件头(在文件首行添加# coding:文件当初存的时候的字符编码)
python解释器默认的编码:
-
-
Python2:默认ASCII码
注:Windows默认编码为gbk
-
-
python3字符串类型在内存中存成Unicode格式的二进制