Python with 工作原理、装饰器、回收机制、内存管理机制、拷贝、作用域等(22)


:默认采用是ASCII编码方式去将字符存入内存 , 如果指定了解释器读脚本的编码方式( #: gbk) , 那么就会以解释器读脚本的编码方式去将字符存入内存 。如果指定u'xxx' , 就是采用的方式去将字符存入内存 。
系统的cmd命令行窗口采用的默认编码格式是:GBK , 在的控制台是采用utf-8的编码格式 , 所以用存的字符串 。
在命令行窗口打印 , 如果存入的字符是GBK格式就不会乱码 , 在控制台打印 , 如果存入的字符是GBK格式就会乱码 , 因为在的控制台是采用utf-8的编码格式 。
首先要了解和utf-8的区别 。
指的是万国码 , 是一种“字码表” 。而utf-8是这种字码表储存的编码方法 。不一定要由utf-8这种方式编成储存 , 也可以使用utf-16,utf-7等其他方式 。目前大多都以utf-8的方式来变成 。
ASCII 美国信息交换标准代码
ASCII(Code for , 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统 , 主要用于显示现代英语和其他西欧语言 。它是现今最通用的单字节编码系统 , 并等同于国际标准ISO/IEC 646 。
由于计算机是美国人发明的 , 因此 , 最早只有127个字母被编码到计算机里 , 也就是大小写英文字母、数字和一些符号 , 这个编码表被称为ASCII编码 , 比如大写字母 A的编码是65 , 小写字母 a的编码是97 。后128个称为扩展ASCII码 。
GBK 和
对于我们来说能在计算机中显示中文字符是至关重要的 , 然而ASCII表里连一个偏旁部首也没有 。所以我们还需要一张关于中文和数字对应的关系表 。一个字节只能最多表示256个字符 , 要处理中文显然一个字节是不够的 , 所以我们需要采用两个字节来表示 , 而且还不能和ASCII编码冲突 , 所以 , 中国制定了编码 , 用来把中文编进去 。
因此 , 应运而生 。把所有语言都统一到一套编码里 , 这样就不会再有乱码问题了 。
标准也在不断发展 , 但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符 , 就需要4个字节) 。现代操作系统和大多数编程语言都直接支持 。
但如果统一成编码 , 乱码问题从此消失了 。但是 , 如果你写的文本基本上全部是英文的话 , 用编码比ASCII编码需要多一倍的存储空间 , 在存储和传输上就十分不划算 。
UTF - 8
基于节约的原则 , 出现了把编码转化为“可变长编码”的UTF-8编码 。UTF-8编码把一个字符根据不同的数字大小编码成1-6个字节 , 常用的英文字母被编码成1个字节 , 汉字通常是3个字节 , 只有很生僻的字符才会被编码成4-6个字节 。如果你要传输的文本包含大量英文字符 , 用UTF-8编码就能节省空间了 。如下所示:
从上面的表格还可以发现 , UTF-8编码有一个额外的好处 , 就是ASCII编码实际上可以被看成是UTF-8编码的一部分 , 所以 , 大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作 。
用记事本编辑的时候 , 从文件读取的UTF-8字符被转换为字符到内存里 , 编辑完成后 , 保存的时候再把转换为UTF-8保存到文件 。如下图:
顺藤摸瓜 , 我们也补一下字符编码的冷知识吧 。我们需要知道的 , 字符集就像有版本号一样 , 内容是不断扩充的 , 新的版本包含旧的版本 。比如