王權富貴出錯集:Python指令碼開頭兩行的:#!/usr/bin/env python和# -*- coding: utf-8 -*-的作用
1.#!/usr/bin/env python
是用來說明指令碼語言是 python 的
是要用 /usr/bin下面的程式(工具)python,這個直譯器,來解釋 python 指令碼,來執行 python 指令碼的。
2、# -*- coding: utf-8 -*-
是用來指定檔案編碼為 utf-8 的
在此,詳細的(主要是翻譯)解釋一下,為何要加這個編碼宣告,以及如何新增編碼宣告:
2.1 使用檔案編碼宣告以前所遇到的問題
Python 2.1 中,想要輸入 Unicode 字元,只能用基於 Latin-1 的 "unicode-escape" 的方式輸入 -> 對於其他非 Latin-1 的國家和使用者,想要
輸入 Unicode 字元,就顯得很繁瑣,不方便。
希望是:
程式設計人員,根據自己的喜好和需要,以任意編碼方式輸入字串,都可以,這樣才正常。
2.2 建議選用的方案
所以,才有人給 Python 官方建議,所以才有此PEP 0263。此建議就是:允許在 Python 檔案中,通過檔案開始處的,放在註釋中的,字串
形式的,宣告,宣告自己的 python 檔案,用何種編碼。由此,需要很多地方做相應的改動,尤其是 Python 檔案的解析器,可以識別此種檔案
編碼宣告。
2.3 具體如何宣告python檔案編碼?
上面已經說了,是,檔案開始處的,放在註釋中的,字串形式的,宣告。
那具體如何宣告,以什麼樣的格式去宣告呢?
其實就是,你之前就見過的,這種:# -*- coding: utf-8 -*-
對此格式的詳細解釋是:
1. 如果沒有此檔案編碼型別的宣告,則 python 預設以ASCII編碼去處理;如果你沒宣告編碼,但是檔案中又包含非ASCII編碼的字元的話,
python解析器去解析的 python 檔案,自然就會報錯了。
2. 必須放在python檔案的第一行或第二行
3. 支援的格式,可以有三種:
1. 帶等於號的:
# coding=<encoding name>2. 最常見的,帶冒號的(大多數編輯器都可以正確識別的):
#!/usr/bin/env python
# -*- coding: <encoding name> -*-