# -*- coding: utf-8 -*-
据我所知,当python脚本文件中涉及非ascii字符时,这行代码是必需的。
当我学习python时,我被告知运行python代码的两种方式(在解释器中逐行运行并运行脚本文件)将产生相同的结果。在大多数情况下,他们确实这样做了。但是当脚本中涉及非ascii字符时,事实证明我必须首先声明编码。
此外,我尝试过exec()函数,尝试执行包含python代码的字符串。
>>> exec ("b='你'")
它有效。
但是如果我将“b ='你'”保存到脚本并运行它,我将会出现语法错误。
我很好奇为什么在解释器中逐行运行python代码时不需要声明编码。
这两种方式的执行程序有什么不同吗?
谢谢。
答案 0 :(得分:0)
因为标准已经有编码(sys.stdin.encoding
)。
stdin
的编码可能来自各种来源,具体取决于平台。在Apple和Windows上预定义(Apple的"utf-8"
和Windows的"mbcs"
,否则由LC_ALL
或LANG
给出的当前区域设置确定(如果{{1}缺少)环境变量。
如果你在linux下运行,你可以运行LC_ALL
,你的例子应该会失败。
答案 1 :(得分:0)
我认为Python的交互式会话使用system encoding
(另请参阅Python Unicode strings and the Python interactive interpreter)。
当它读取源文件时,它需要知道如何解释它正在解析的数据 没有必要用与执行它的终端相同的编码来编写脚本是合乎逻辑的;在没有指定编码的环境的情况下运行脚本时甚至更多。
此外,有趣的是阅读 Joel Spolsky The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets这可能解释为什么Python选择要求开发人员明确编码(我希望他们设置一个默认为UTF8,但他们的方式与Zen of Python)保持一致。