Python2与Python3字符兼容问题的解决方案
Python2和Python3的字符兼容问题是非常明显的
原因:
Python3默认编辑字符:UTF-8
Python2默认编译字符:ASCII
下面列举出三种错误类型:
第一种:SyntaxError: Non-ASCII character '\xe7' in file:报错文件路径
问题描述:
对于一个包含中文字符的Python文件,比如在注释里包含中文字符,或者变量的值包含中文字符
Python3环境中,Python文件里面包含中文字符,不报错,因为默认编译字符是UTF-8
Python2环境中,Python文件里面包含中文字符,报错,错误信息:SyntaxError: Non-ASCII character '\xe7' in file:报错文件路径
实例及解决方案:
问题实例:Python2环境,中文报错
解决方法:在文件首行添加:# -*- coding: utf-8 -*-
第二种:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)
实例及解决方案:
问题实例:Python2环境,出现报错
查看一下它的默认编码,是ASCII码
解决方法:导入sys包,设置默认编码为UTF-8,编译通过(设置完成后,我们可以输出它的默认编码看一下)
第三种:使用open函数时指定编码格式
这里只要稍稍注意一下就可以
在Python3环境中,导入相应的包,直接使用open(file,mode='rb', encoding='utf-8')
file:是文件路径,绝对路径和相对路径都OK
mode:是打开的方式,r:读,w:写,b:二进制
encoding:打开文件的编码方式
在Python2环境中,导入相应的包,需要使用io.open(file,mode='rb', encoding='utf-8'),Python2也有open函数,但是没有不能携带encoding这个参数
下面我们分别看一下它们方法的定义:
python2 的io.open:
python2 的open:
python3 的open: