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环境,中文报错

Python2与Python3字符兼容问题的解决方案

Python2与Python3字符兼容问题的解决方案


    解决方法:在文件首行添加:# -*- coding: utf-8 -*-

Python2与Python3字符兼容问题的解决方案





第二种:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)

实例及解决方案:

         问题实例Python2环境,出现报错

Python2与Python3字符兼容问题的解决方案


Python2与Python3字符兼容问题的解决方案


        查看一下它的默认编码,是ASCII码

Python2与Python3字符兼容问题的解决方案


    解决方法:导入sys包,设置默认编码为UTF-8,编译通过(设置完成后,我们可以输出它的默认编码看一下)

Python2与Python3字符兼容问题的解决方案





第三种:使用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与Python3字符兼容问题的解决方案


Python2与Python3字符兼容问题的解决方案


 python2 的open:

Python2与Python3字符兼容问题的解决方案

Python2与Python3字符兼容问题的解决方案


 python3 的open:

Python2与Python3字符兼容问题的解决方案

Python2与Python3字符兼容问题的解决方案