Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 由于UTF-8 BOM(字节顺序标记),未找到Shebang可执行文件_Python_Bash - Fatal编程技术网

Python 由于UTF-8 BOM(字节顺序标记),未找到Shebang可执行文件

Python 由于UTF-8 BOM(字节顺序标记),未找到Shebang可执行文件,python,bash,Python,Bash,出于某种原因,我的一个脚本中的shebang不起作用: #!/usr/bin/env python # -*- coding: utf-8 -*- print "Hello World" 当我执行这个文件时,我得到一个错误 % ./test.py ./test.py: 1: #!/usr/bin/env: not found 我的/usr/bin/目录的内容没有问题:env和python都在那里,具有正确的执行权限。问题的原因是我的文件是使用UTF8和BOM(字节顺序标记)编码的。 删除B

出于某种原因,我的一个脚本中的shebang不起作用:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
print "Hello World"
当我执行这个文件时,我得到一个错误

 % ./test.py
./test.py: 1: #!/usr/bin/env: not found

我的
/usr/bin/
目录的内容没有问题:
env
python
都在那里,具有正确的执行权限。

问题的原因是我的文件是使用UTF8和BOM(字节顺序标记)编码的。

删除BOM表,即使用UTF8编码文件而不使用BOM表,可以解决此问题


注意:对于记事本++用户,“不带BOM的UTF8”在编辑器中也被称为(奇怪的)“ANSI as UTF-8”。

这是由于Unix和Linux处理shebang的方式。必须是文件中的前两个字节。如果您有一个BOM表,那么这不再是真的,因此会出现错误

请注意,从python解释器的角度来看,放置BOM是完全无用的,因为
#-*-coding:utf-8-*-
已经告诉python编码


AFAIK BOM通常不与utf-8一起使用。它用于UTF-16 et模拟,以指定字节顺序。如果编辑器假定编码错误,您应该能够使用正确的编码显式打开文件。

事实上,根据Unicode标准,“对于UTF-8,既不要求也不建议使用BOM,但在UTF-8数据从使用BOM的其他编码形式转换或BOM用作UTF-8签名的情况下可能会遇到这种情况。“但是,对于不知情的程序员来说,使用Notepad++犯错误的风险很高,因为编辑器显示的默认UTF8编码(简称为“UTF-8”)实际上是一种使用BOM的“危险”编码。@Sebastien Notepad++是一个Windows程序。如果您想使用众所周知是封闭系统一部分的编辑器生成跨平台代码,您必须在所有配置上测试代码,因为编辑器不关心这些细节以使代码可移植。即使使用更多的开放式软件尝试跨平台,这一点也是正确的。Unicode常见问题解答中甚至提到了这一点: