我有一个简单的脚本。
# -*- encoding : utf-8 -*-
episode_title = "ザ・ロック(日本語吹替版)".decode('utf-8')
print episode_title.encode('utf-8')
但它不适用于我的cmd
控制台(Win8 PC,编码很大)。
SyntaxError: Non-ASCII character '\xe3' in file G:\test.py on line 2, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
虽然我已将代码页更改为utf-8
chcp 65001
它仍然无法运作。
但是当我在我的IPython笔记本中运行它时,它可以工作! (也可以在PyCharm和IPython Qt控制台中使用)
ザ・ロック(日本語吹替版)
但是当我在Ubuntu中运行它时:
aaron@ubuntu:~$ python test.py
File "test.py", line 2
SyntaxError: Non-ASCII character '\xe3' in file test.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
让我感到惊讶的是它无法在Ubuntu中运行。
请有人解释这个谜团吗?
为什么它在IPython Notebook或PyCharm中运行?但不是在CMD或Ubuntu终端?
答案 0 :(得分:6)
您的评论不符合PEP的要求,因为您在单词encoding
和冒号之间留了一个空格:
# -*- encoding : utf-8 -*-
# ^
PEP指定用于匹配声明的确切正则表达式:
coding[:=]\s*([-\w.]+)
因此,Python会查找文字文本coding
,后跟冒号:
或等号=
,后跟零个或多个空白字符,然后是编解码器。< / p>
您需要做的就是删除您拥有的额外空间:
# -*- encoding: utf-8 -*-
当Python必须从磁盘读取源代码时,注释仅适用于 ;在交互式解释器中,您可以通过平台的正常本地化支持,通过控制台或终端输入您的代码,该控制台或终端也会声明编码。 IPython和PyCharm属于这一类;您使用该信息正确解码键盘输入,并且不需要声明。
答案 1 :(得分:2)
只需替换
# -*- encoding : utf-8 -*-
与
# encoding: utf-8