【转】关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型…

  • Post author:
  • Post category:python


原文网址:http://www.crifan.com/python_head_meaning_for_usr_bin_python_coding_utf-8/


#!/usr/bin/python

是用来说明脚本语言是python的

是要用/usr/bin下面的程序(工具)python,这个解释器,来解释python脚本,来运行python脚本的。


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

是用来指定文件编码为utf-8的

详情可以参考:


PEP 0263 — Defining Python Source Code Encodings

在此,详细的(主要是翻译)解释一下,为何要加这个编码声明,以及如何添加编码声明:

使用文件编码声明以前所遇到的问题

Python 2.1中,想要输入Unicode字符,只能用基于Latin-1的”unicode-escape”的方式输入 -> 对于其他非Latin-1的国家和用户,想要输入Unicode字符,就显得很繁琐,不方便。

希望是:

编程人员,根据自己的喜好和需要,以任意编码方式输入字符串,都可以,这样才正常。

建议选用的方案

所以,才有人给Python官方建议,所以才有此PEP 0263。

此建议就是:

允许在Python文件中,通过文件开始处的,放在注释中的,字符串形式的,声明,声明自己的python文件,用何种编码。

由此,需要很多地方做相应的改动,尤其是Python文件的解析器,可以识别此种文件编码声明。

具体如何声明python文件编码?

上面已经说了,是,文件开始处的,放在注释中的,字符串形式的,声明。

那具体如何声明,以什么样的格式去声明呢?

其实就是,你之前就见过的,这种:

1

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

对此格式的详细解释是:

    1. 如果没有此文件编码类型的声明,则python默认以ASCII编码去处理
  • 如果你没声明编码,但是文件中又包含非ASCII编码的字符的话,python解析器去解析的python文件,自然就会报错了。



必须放在python文件的第一行或第二行


支持的格式,可以有三种:

  1. 带等于号的:

    1

    # coding=<encoding name>

  2. 最常见的,带冒号的(大多数编辑器都可以正确识别的):

    1
    2

    #!/usr/bin/python

    # -*- coding: <encoding name> -*-

  3. vim的: