爲什麼要在python文件頭聲明編碼方式?

在寫python時,有時會在文件頭聲明編碼方式,如下:

# -*- coding: utf-8 -*-

有時又沒有,似乎寫不寫都沒關係。但實際上這樣的想法是不行的,即便你沒有上面的聲明,Python將默認爲ASCII標準編碼,對python解釋器來說兩者相同,但對編輯器來說,就可能出現識別不了的問題。
官方文檔PEP 263是這麼描述的:

在Python 2.1中,只能使用基於Latin-1的編碼“ unicode-escape”編寫Unicode文字。
這使得編程環境對在許多亞洲國家/地區的非Latin-1語言環境中生活和工作的Python用戶而言非常不利。
程序員可以使用最喜歡的編碼來編寫其8位字符串,但是綁定到Unicode文字的“ unicode-escape”編碼

換句話說,默認的ASCII標準編碼(規定了128個字符的編碼),對於英文字母是足夠的,但是對於非英語國家編碼就顯得複雜了起來(具體也可以搜索字符編碼相關知識)。比如法語德語中還有注音,它們可以ASCII(總共256)中閒置的字符,但是對於更復雜的中文則還有專門的比如GB2312方式。

這樣就針對每種語言都有各種各樣的編碼方式,有沒有一種統一的能夠囊括所有符號的編碼方式呢?有,那就是Unicode。
Unicode 是一個很大的集合,現在的規模可以容納100多萬個符號。每個符號的編碼都不一樣,比如,U+0639表示阿拉伯字母Ain,U+0041表示英語的大寫字母A,U+4E25表示漢字嚴。具體的符號對應表,可以查詢unicode.org,或者專門的漢字對應表

注意Unicode 只是一個符號集,它只規定了符號的二進制代碼,卻沒有規定這個二進制代碼應該如何存儲。於是UTF-8應運而生,成爲在互聯網上使用最廣的一種 Unicode 的實現方式。其他實現方式還包括 UTF-16(字符用兩個字節或四個字節表示)和 UTF-32(字符用四個字節表示。
前面PEP263已經表明python支持utf-8方式,實現方式見本文開頭,python官方則建議聲明編碼方式的同時聲明解釋器路徑,
如下:

#!/usr/local/bin/python3
# -*- coding: utf-8 -*-

而一般簡化的聲明可以寫成:

#coding=utf-8

或者

#coding:utf-8

只需要匹配以下正則表達式即可:

^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)

參考文檔

python中頭文件的聲明
字符編碼筆記:ASCII,Unicode 和 UTF-8

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章