# -*- coding: utf-8 -*-
我明白,当python脚本文件中涉及非ascii字符时,这行代码是必要的。
当我学习python时,有人告诉我运行python代码的两种方式(在解释器中逐行运行和运行脚本文件)会产生相同的结果。在大多数情况下,他们确实是这样做的。但是当脚本中涉及到非ascii字符时,我必须首先声明encoding。
此外,我还尝试了exec()函数,试图执行包含python代码的字符串。
>>> exec ("b='你'")
。
但是如果我把"b = '
我很好奇为什么我不需要在解释器中逐行运行python代码时声明编码。
这两种方式的执行过程有什么不同吗?
谢谢。
我假设Python的交互式会话使用system encoding
(另请参阅Python Unicode字符串和Python交互式解释器)。
当它读取源文件时,它需要知道如何解释它正在解析的数据合乎逻辑的是,脚本不必用与执行它的终端相同的编码编写;当脚本在没有指定编码的环境下运行时,甚至更多。
此外,阅读Joel Spolsky《每个软件开发人员绝对必须积极了解Unicode和字符集的绝对最低限度》也很有趣,这可能解释了为什么Python选择要求开发人员明确编码(我更希望他们将默认设置为UTF8,但他们的方式与Python的Zen一致)。
因为标准中已经有一个编码(sys.stdin.encoding
)。
stdin
的编码可以根据平台的不同而有不同的来源。在Apple和Windows上,它是预定义的(Apple为"utf-8"
, Windows为"mbcs"
),否则它由LC_ALL
或LANG
(如果缺少LC_ALL
)环境变量给出的当前区域设置确定。
如果你在linux下运行,你可以运行LC_ALL=en_GB.ascii python
,你的例子应该失败。