首页 > 代码库 > "#!/usr/bin/python: No such file or director"引发的编码问题
"#!/usr/bin/python: No such file or director"引发的编码问题
问题描述
我自己写了一个Python脚本,在Linux服务器和我的Mac上运行都报错:
./build_system.py: line 1: #!/usr/bin/python: No such file or directory
在网上搜索了半天,发现都说都问题原因是第一行尾部写入了Windows都回车“\r\n”,导致解析成了“python\r”而不是“python”,因而报错是“: No such file or directory”(\n符号导致了行开始,覆盖了原来都内容)。从网上都这个解释来看,跟我都这个问题现象不是一样的。更何况,我手动删除第一行,在Linux环境下重写了一遍,还是一样的报错,因此可以证明我遇到的问题并非是“\r\n”引起的。
问题分析
我认为一定是有不可见字符导致的问题。于是,我用Linux命令diff找一个可以运行的Python脚本来对比下头部:
$ diff ../../unibuild/unibuild.py build_system.py | more 1c1 < #!/usr/bin/python --- > <U+FEFF>#!/usr/bin/python
果然不出所料,不能运行的脚本文件开头,多了一个不可见内容<U+FEFE>,搜索这个字符发现了问题原因。
问题原因
引用网友的描述:
有些编辑器,比如M$ Windows的记事本,在创建UTF8编码文件时会在头部添加一个不可见字符。这个字符可以通过vim查看到,而且如果是一个php文件,php4、php5在解析时均会有输出。 原来这个被称作BOM(Byte Order Mark)的不可见字符,是Unicode用来标识内部编码的排列方式的,在UTF-16、UTF-32编码里它是必需的,而在UTF-8里是可选的。因此,才会出现有的编辑器在文件头部添加添加BOM、而有的语法解析器又不作处理的的混乱情况。 根据w3c里FAQ的建议,解决方法就是,删无赦。
请参考:UTF-8编码中BOM的检测与删除
问题解决
用vi编辑器打开出问题的文件,输入如下指令:
:set nobomb #删除UTF-8 BOM字符
反之,如果是保留UTF-8 BOM则输入“:set bomb”.
"#!/usr/bin/python: No such file or director"引发的编码问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。