"#!/usr/bin/python: No such file or director"引發的編碼問題
阿新 • • 發佈:2017-05-10
spa utf8 方法 文件頭 https span diff inux vi編輯器
問題描述
我自己寫了一個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"引發的編碼問題