為什麼要在python檔案頭宣告編碼方式?

2021-10-04 19:14:07 字數 1364 閱讀 8729

在寫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

Python 檔案頭注釋

encoding utf 8是注釋,但 python 看到這句話就知道了接下來應該用 utf 8 對該 py 檔案進行解碼了。如果直接採用 python file.py 的方式執行指令碼的話,有沒有 shebang 都無所謂,因為我們自己直接指定了該指令碼的直譯器,即 python。通常我們認為 u...

為什麼不要在中國註冊網域名稱

我認為,無論是企業還是個人,在做 的時候,都不要在中國註冊網域名稱,因為這裡面有巨大的安全風險,如果已經在中國註冊了網域名稱,應該盡快將網域名稱轉移 transfer 到國外,以避免風險。政策性風險 這裡面最早的乙個知名案例是羅永浩的牛博網,牛博網一度聚集了梁文道 韓寒 連岳 柴靜等一批名家,日訪問...

為什麼模板函式的定義也要在標頭檔案裡

對於模板,最重要的一點,就是在定義它的時候,編譯器並不會對它進行編譯,因為它沒有乙個實體可用。只有模板被具體化 specialization 之後 用在特定的型別上 編譯器才會根據具體的型別對模板進行編譯。所以才定義模板的時候,會發現編譯器基本不會報錯,也做不出智慧型提示。但是當它被具體用在乙個類上...