這裡介紹如何設定 Python 指令稿的檔案編碼,讓包含中文字的 Python 程式可以正常執行,不會產生亂碼。
Python 在讀取指令稿並執行時,預設會將檔案以 ASCII 編碼的方式來處理,也就是說如果在 Python 程式碼或是註解當中有包含中文字的話,在執行時就會出錯,以下是解決 Python 中文編碼問題的教學。
這是一個包含中文註解的 Python 指令稿
chinese.py
:
#!/usr/bin/python # 中文註解 print("Hello, world.")
如果直接執行:
python chinese.py
會出現類似這樣的錯誤:
File "chinese.py", line 3 SyntaxError: Non-ASCII character '\xe4' in file chinese.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
不論中文字是出現在程式碼還是註解當中,都會出現這個錯誤,這則錯誤訊息的意思是指我們的 chinese.py
指令稿中包含非 ASCII 的字元。
如果要要讓這種包含中文的 UTF-8 編碼的 Python 指令稿正常執行,需要加上明確的檔案編碼宣告才行,例如:
#!/usr/bin/python # -*- coding: utf-8 -*- # 中文註解 print("Hello, world.")
Python 指令稿的編碼宣告必須出寫在程式碼的第一行或第二行,這裡我們在第二行指定檔案編碼格式 UTF-8,這樣就可以正常執行了。
python chinese.py
Hello, world.
Python 指令稿的編碼指定方式相當彈性,事實上它是使用 coding[=:]\s*([-\w.]+)
這一串正規表達式(regular expression)來讀取編碼設定的,所以只要第一行或第二行註解中的內容可以跟這個正規表達式,即可正確設定檔案編碼,以下是常見的幾種設定方式。
這是同時適用於 GNU Emacs 編輯器的編碼設定方式,這樣寫的話當我們使用 Emacs 編輯器開啟這個 Python 指令稿時,Emacs 就會自動以 UTF-8 編碼開啟此檔案:
# -*- coding: utf-8 -*-
這是適用於 Vim 編輯器的寫法:
# vim:fileencoding=utf-8
當然也可以用自己喜歡的格式:
# file encoding: utf-8 (for chinese)
如果在 Windows 中使用 Big5 編碼的話,則將編碼的名稱改為 cp950
:
# -*- coding: cp950 -*-
其餘以此類推。
參考資料:python.org、Python Documentation、StackOverflow