已经听说了,Python 3.x,对于文件的编码,支持的很好了,很多时候都可以自动检测,并正确存储为unicode字符串了。
并且在windows 的cmd中,也都可以正常输出显示,不会出现编码错误了。
所以,对此部分,特意去测试一下,通过代码,得到下面的各种情况的结果:
#!/usr/bin/python # -*- coding: utf-8 -*- """ Function: 【整理】关于Python中自动识别字符串编码,并正确在cmd中输出的各种情况的测试【整理】关于Python中自动识别字符串编码,并正确在cmd中输出的各种情况的测试Author: Crifan Version: 2012-11-19 Note: 1. 当前测试环境: win xp SP3 + cmd + 默认编码为GBK """ testGbkStr = "此处只是测试中文是否可以在cmd中正常输出显示"; print("testGbkStr=",testGbkStr); # 1. 结果证实,当文件本身编码为GBK,但是没有GBK编码声明时,直接输出,会出错的: # File "G:\python\cn_print\cn_print.py", line 2 #SyntaxError: Non-UTF-8 code starting with '\xb5' in file G:\python\cn_print\cn_print.py on line 2, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details # 2。 现在给开始添加上gbk编码声明,看看是否可以正常在cmd中输出 #此时,就是可以正常输出的: #testGbkStr= 此处只是测试中文是否可以在cmd中正常输出显示 # 3. 再去把编码声明改为UTF-8,且把文件编码也同时转换为UTF-8,再去看看是否可以正常输出 #结果也是可以正常输出的: #testGbkStr= 此处只是测试中文是否可以在cmd中正常输出显示 # 4.把文件本身编码改为GBK,但是编码声明改为utf-8,看看结果如何: #结果显示: # File "G:\python\cn_print\cn_print.py", line 7 #SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xb4 in position 0: invalid start byte # 5. 把文件本身编码改为UTF-8,但是把文件声明改为GBK,看看输出效果: #结果显示: # File "G:\python\cn_print\cn_print.py", line 1 #SyntaxError: 'gbk' codec can't decode bytes in position 59-60: illegal multibyte sequence
【总结】
如果你正确声明(指定)了文件编码的话,那么python 3.x中对于你所写的字符串,默认会自动解析并存储为Unicode的,所有后期的各种处理,包括在cmd中的输出,都会很好的自动转换为对应的编码并输出显示的,比如输出到cmd中,会自动转换为cmd的GBK编码,得以正确显示的。
当然,如果你本身,像我测试中的那样,文本内容本身的实际编码和所声明的编码不一致(比如文件是GBK,但声明为UTF-8,或文件是UTF-8,但声明为GBK),则肯定会有对应的编码错误,Python无法正常解析你的py文件的。