常用編碼介紹
常用編碼之間的關係如下:
iso-8859-1 又稱 latin-1,是乙個 8 位單位元組字符集,它把 ascii 的最高位也利用起來,並相容了 ascii,新增的空間是 128,但它並沒有全用完。在 ascii 編碼之上又增加了西歐語言、希臘語、泰語、阿拉伯語、希伯來語對應的文字元號,它向下相容 ascii 編碼。
gb2312,gbk,gb18030
·gb2312
gb2312 全稱為資訊交換用漢字編碼字符集,是中國於 1980 年發布,主要用於計算機系統中的漢字處理。gb2312 主要收錄了 6763 個漢字、682 個符號。
gb2312 覆蓋了大部分使用率高的漢字,但不能處理像古漢語等特殊的罕用字,所以後來出現了像 gbk、gb18030 這種編碼。
gb2312 完全相容 iso8859-1。
·gbk
全稱為 chinese internal code specification,即漢字內碼擴充套件規範,於 1995 年制定。它主要是擴充套件了 gb2312,在它的基礎上又加了更多的漢字,它一共收錄了 21003 個漢字,它向下相容 gb2312。
·gb18030
現在最新的內碼字集於 2000 年發布,並於 2001 年強制執行,包含了中國大部分少數民族的語言字元,收錄漢字數超過 70000 餘個。
它主要採用單位元組、雙位元組、四位元組對字元編碼,它是向下相容 gb2312 和 gbk 的,雖然是我國的強制使用標準,但在實際生產中很少用到,用得最多的反而是 gbk 和 gb2312。
unicode
當初被稱為「萬國碼」,當時想要表示世界上所有字元。
unicode 編碼設計成了固定兩個位元組,所有的字元都用 16 位(2^16=65536)表示,包括之前只佔 8 位的英文本元等,所以會造成空間的浪費,unicode 在很長的一段時間內都沒有得到推廣應用。
unicode 完全重新設計,不相容 iso8859-1,也不相容任何其他編碼。
utf-8
對於英文本母,unicode 也需要兩個位元組來表示。所以 unicode 不便於傳輸和儲存。因此而產生了 utf 編碼,utf-8 全稱是(8-bit unicode transformation format)。
utf 編碼相容 iso8859-1 編碼,同時也可以用來表示所有語言的字元,不過,utf 編碼是不定長編碼,每乙個字元的長度從 1-4 個位元組不等。其中,英文本母都是用乙個位元組表示,而漢字使用三個位元組。
【老鳥的建議】一般專案都會使用 utf-8。unicode 中雖然漢字是兩個位元組,utf-8 中漢字是 3 個位元組。但是網際網路中乙個網頁也包含了大量的英文本母,這些英文本母只占用 1 個位元組,整體占用空間,utf-8 仍然優於 unicode。
中文亂碼問題
windows 作業系統預設的編碼是 gbk,linux 作業系統預設的編碼是 utf-8。當我們用 open()時,呼叫的是作業系統開啟的檔案,預設的編碼是 gbk。
【例】中文字元檔案,亂碼出現測試
# 測試寫入中文
f =open
(r'b.txt'
,'w'
)f.write(
'日積\n月累'
)f.close(
)
執行結果:
linux系統中不會存在這個問題。
在pycharm檔案編輯區單擊右鍵,選擇 fileencoding,選擇 gbk 即可:
再在彈窗中選擇 reload,檔案即顯示正常。
編碼知識整理
可能很多人事先沒有了解好相關的編碼知識,就把unicode編碼和utf 8編碼混為一談相互比較,認為是兩種不同的編碼,其實不然,unicoe編碼只是乙個字符集,規定了字元和二進位制 的對應關係,好比是乙個大字典,但是對於如何編碼儲存在計算機及其具體實現,unicode編碼並沒有做規定,而utf 8編...
Python編碼知識
無論是py2還是py3,都使用unicode作為記憶體編碼,簡稱內碼 儲存在python直譯器記憶體中的文字,輸出到螢幕 編輯器,或者儲存成檔案的時候,都要將內碼轉換成utf8或者gbk等編碼格式 同樣,python直譯器從輸入裝置接收文字,或者從檔案讀取文字的時候,都要將utf8或者gbk等編碼轉...
Python編碼知識
編碼是資訊從一種形式或格式轉換為另一種形式的過程也稱為計算機程式語言的 簡稱編碼。用預先規定的方法將文字 數字或其它物件編成數碼,或將資訊 資料轉換成規定的電脈衝訊號。a.ascii 8位 目前計算機中用得最廣泛的字符集及其編碼,是由美國國家標準局 ansi 制定的ascii碼。適用於所有拉丁文本字...