编码样式
- ASCII编码:美国标准代码,将各种东西(英文字母,数字,标点,字符)换成计算机识别的二进制数,一共265个字符,不支持汉字
- Unicode:全球所有字符的编码,但是没有规定的保存方式,如65-->A
- ANSI:一般跟系统语言有关系
- GB2312:汉字处理,比较少,存储编码
- GBK编码:汉字编码,进行了扩展,包含生僻字,存储编码
- UTF-8:表示把unicode编码存储的时候,把一个汉字或者其他字符,保存为3个字节,完全兼容ascii码的256个字符;
- UTF-32:保存为4个字节,很占内存
乱码的根源
乱码的根源就在于字符集编码不匹配导致,探索隐藏在编程过程中鲜为人知的字符集转换问题,将有助于从根源上解决乱码问题。
- 源码字符集:
英文the source character set,是指源代码文件是使用何种编码字符集保存和传输的。 - 执行字符集:
英文the execution character set,是指源代码经过编译、链接后的可执行文件是使用何种编码字符集保存的,程序实际执行时,内存中的字符串编码就是执行字符集。 - 运行环境编码:
是指操作系统(或者当前控制台环境)用于显示文字的编码字符集。
源代码文件(源码字符集)经过编译/链接,生成可执行文件(执行字符集),最后程序运行于实际环境中(运行环境编码)。在这过程中如果有字符集不匹配,最终就无法显示预期的文字信息,甚至产生乱码。
- 编译器在编译源代码时,会将源码字符集转化为执行字符集,如果编译器不能正确识别源码字符集,就得不到正确的字符串数据。
- 可执行文件在实际运行环境中执行时,为了在控制台(或者其他UI)上显示出字符串,就要将执行字符集转化为运行环境的字符集。如果运行环境的字符集与执行字符集不同,也会导致乱码。
总结起来,要想使程序不会乱码,必须满足:
- 编译器准确识别了源码字符集,从而得到正确的字符串数据(执行字符集)。
- 运行环境的编码与执行字符集相同。
python2.7的编码方式
python2.7的默认编码方式为ascii字符集,这里所说的编码方式指执行编码方式,所以在源文件的开头,往往需要加上# -