为什么使用 python 解释器时不需要声明编码?


# -*- 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_ALLLANG(如果缺少LC_ALL)环境变量给出的当前区域设置确定。

如果你在linux下运行,你可以运行LC_ALL=en_GB.ascii python,你的例子应该失败。

最新更新