Python-编码问题

问题

1
2
3
File "sms.py", line 8
SyntaxError: Non-UTF-8 code starting with '\xe6' in file sms.py on line 8, but no encoding declared;
see http://python.org/dev/peps/pep-0263/ for details

解决办法

在Python 代码的首行以注释的方式加上代码的编码方式即可解决。

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

PEP-0236

PEP 是Python Enhancement Proposals 的缩写。一个PEP 是一份为Python 社区提供各种增强功能的技术规格,也是提交新特性,以便让社区指出问题,精确化技术文档的提案。

而PEP-0236就是为了说明Python 代码的编码方式问题而提出,所以,在python官方建议中,有了PEP 0236 允许在Python 文件中,通过文件开始处放在注释中以字符串形式声明自己的python文件,用何种编码。
如果没有此文件编码类型的声明,则python默认以ASCII编码去处理。
如果你没声明编码,但是文件中又包含非ASCII编码的字符的话,python解析器去解析的python文件,自然就会报错了。
必须放在python文件的第一行或第二行!

支持的格式有三种:

  • 带等于号的
    1
    # coding=<encoding name>
  • 最常见的,带冒号的(大多数编辑器都可以正确识别的)
    1
    2
    #!/usr/bin/python
    # -*- coding: <encoding name> -*-
  • VIM 的
    1
    2
    #!/usr/bin/python
    # vim: set fileencoding=<encoding name> :