Python代码中“# -*- coding: utf-8 -*-”的作用及正确位置

语句:

# -*- coding: utf-8 -*-

的作用是告诉Python解释器和IDE,我这个文件中的内容你们该以什么样的编码进行读取和保存。

在Python 3中,默认是以“utf-8”对代码内容进行读取和保存的。

语句

# -*- coding: utf-8 -*-

的具体作用通过下面这个例子来说明。

现在有一个文件,名字叫AAA.py,我们把其编码从UFT-8改为ANSI,如下图所示,


改为ANSI编码后我们运行这个py文件,运行结果如下图所示:

上面这句报错我复制如下:
SyntaxError: Non-UTF-8 code starting with ‘\xe7’ in file E:\Project\PycharmProjects\P-001\Files\P-001\current\AAA.py on line 2, but no encoding declared。
意思是解释器发现这个文件并不是UTF-8的编码类型,UTF-8的编码类型的文件会以 ‘\xe7’ 开头,但它没有以 ‘\xe7’ 开头,所以它并不是UTF-8编码类型的文件。如果不是UTF-8编码类型的文件,那就需要在文件的首行声明一下这个文件的编码类型,但是很遗憾,解释器没有发现类似于

# -*- coding: utf-8 -*-

的说明语句。

我们在文件的首行加上下面这条语句:

# -*- coding: ANSI -*-

即将文件内容改成下面这样:

# -*- coding: ANSI -*-

str1 = '昊虹图像算法'

再运行就不会报上面的错误了,因为我虽然文件的编码为ANSI,不是Python3默认的UTF-8,但我用语句

# -*- coding: ANSI -*-

声明了我的文件编码类型,所以就不会报上面的错误了。

总结一下:
语句:

# -*- coding: utf-8 -*-

用于向Python3解释器声明源代码文件所用的编码类型,Python3默认就是将文件按utf-8进行读取和保存的,所以当文件的编码为utf-8时,其实这句话没必要写。
当文件的编码不为utf-8时,比如为ANSI编码时,我们可以用下面这条语句告诉Python3解释器编码类型为ANSI,

# -*- coding: ANSI -*-

从其作用来看,显然这条语句应该是放置于代码的头一行,否则就起不了作用的,因为Python3解释器在解释其内容时首先要知道编码类型嘛。

最后需要说明一点:
一个文档在Pycharm中打开,不管其之前的编码类型是什么,一旦发生内容上的修改,然后保存,那么编码类型都会被转化为UTF-8类型。所以在Pycharm环境下,如果我们习惯性地把文件作一个改动并保存,那么是不存在编码问题的,也就没有必要用本博文重点解释的编码声明语句。

物联沃分享整理
物联沃-IOTWORD物联网 » Python代码中“# -*- coding: utf-8 -*-”的作用及正确位置

发表评论