python开头声明编码_Python脚本的编码声明
在《Python⽂件的标准顺序》这篇⽂章中,介绍了⼀个Python⽂件标准的顺序。可以看到,Unix的shebang是优先于Python的⽂件编码的。本⽂详细介绍Python⽂件编码的声明。注意这⾥指的是Python脚本本⾝的编码,不是在Python中处理⽂件的编码。
Python程序员可能对这句话并不陌⽣,# -*- coding: utf-8 -*-。并且也在⾃⼰的脚本中这样写了。为什么要写的这么花哨呢?其实,这是Emacs的编码声明,这样写可以被Emacs编辑器和Pyhton解释器都兼容。对于使⽤Vim的程序员,其实应该写成这样: vim: set fileencoding= :。(好吧其实并没有Emacs好看)
如何声明?
在PEP263中定义了对Python源码⽂件编码声明。
要定义Python的源代码编码,需要在第⼀⾏或第⼆⾏编写像下⾯这样的“magic comment”:
# coding=
编码⽅式是以⼀个正则来匹配的:
python新手代码你好1
^[\t\v]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)
所以如果写成下⾯这样,也能⼯作:
1
2
3
# awesome_encoding: utf-8
print"你好"
其中编码的名字必须能被Python词法分析器认识,否则会报语法错误:
1
2
3
# coding: utf-8s
SyntaxError:encodingproblem:utf-8s
如果不写,那么将使⽤默认的编码ASCII(python2):
1
2
print"你好"
但是在Python3中默认的编码是UTF-8,所以上⾯的代码在Python3中运⾏没有错误。
如何安排编码声明和shebang的顺序?
Unix系统规定,可以使⽤shebang指定脚本默认的编辑器。例如:
⽽它被如此调⽤(”$”是命令提⽰符)
1
$foobar
该命令的输出等同于
1
$/bin/sh-x/usr/local/bin/foobar
shebang的定义如下:
在计算机科学中,Shebang(也称为 Hashbang )是⼀个由井号和叹号构成的字符序列 #! ,其出现在⽂本⽂件的第⼀⾏的前两个字符。在⽂件中存在 Shebang 的情况下,类 Unix 操作系统的程序载⼊器会分析 Shebang 后的内容,将这些内容作为解释器指令,并调⽤该指令,并将载有 Shebang 的⽂件路径作为该解释器的参数。
所以说shebang要求⽂件的第⼀⼆个字符是#!,⽽Python为了兼容shebang,定义⽂件编码必须在第⼀⾏或第⼆⾏。
结论就很清晰了,应该先写shebang在写Python的⽂件编码。
配合Unicode BOM
在windows平台中,也是兼容Unicode BOM的。在⽂件的开头声明 \xef\xbb\xbf表⽰⽂件是UTF-8编码。
如果同时使⽤了Unicode BOM和⽂件编码注释,则⽂件编码注释必须和Unicode BOM相同(UTF-8),否则抛出错误。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论