1. 程式人生 > >python 入門之 – 字元編碼及相應處理方法(二十一)

python 入門之 – 字元編碼及相應處理方法(二十一)

字元編碼及操作方法

今天來了解了解關於字元編碼的一些知識,關於字元編碼,其實我們生活當中所有的智慧裝置都有字元編碼,並且每個國家都有自己的字元編碼,記錄著各個國家的文字資訊,例如早期的一些網站專案都是用中國的 gbk 編碼。

每個國家的計算機編碼只能識別自己國家的文字,如果非當前國家編碼的文字在計算機文件中會以亂碼顯示,如早期 PHP織夢CMS 這種,當時這種型別的 CMS 開發出來的時候用的就是 gbk 的編碼,所以,如果你用除去中文和 26 個英文字元之外的文字,他是會全部亂碼的。

這樣一來導致各國語言在網際網路上都不能通行,於是歐洲計算機委員會提出方案設計一款通用的國際編碼 utf-8

,這樣一來所有國家的網站或者出口的軟體包,都能夠跨國的進行互動,而不是隻停留在當前本土國家通行,所以現在開發都是使用 utf-8 編碼,可是在中國 windows 計算機中預設的編碼是 gbk ,其他國家也有預設的編碼儲存在計算機中,那麼如果老的專案該怎麼執行在他國的電腦上呢,其實 utf-8 編碼是從 Unicode 編碼轉換而來的,並且所有計算機中除去了本國語言包外,還有 Unicode (萬國碼),什麼是 Unicode?

Unicode 是為了解決傳統的字元編碼方案的侷限而產生的,它為每種語言中的每個字元設定了統一併且唯一的二進位制編碼,以滿足跨語言、跨平臺進行文字轉換、處理的要求。

因為我是半路出家自學程式設計的,我沒有科班程式系統性的學習如 CC++Java 等其他語言,我不太清楚別的語言如果出現這種情況該怎麼辦,我只知道如果 JS 這門語言編碼格式為 gbk 可以在引入的時候,在 script 標籤上寫入 utf-8 就可以了,但也不是絕對,也有極大的可能整個檔案需要 copy 出來,然後新建一個檔案重新以 utf-8 的標準寫入,比較麻煩。當然這是題外話了,迴歸正傳。

其實在 python3 裡面已經給我們內建了轉換的函式方法如:

encode() : 對內容進行指定編碼
decode() : 對內容進行解碼( 注意:編碼是什麼格式,解碼就一定要是什麼格式,否則會報錯 )

例如:

#! -*- coding: utf-8 -*-
str = '中文'
s = str.encode('gb2312')  #指定編碼格式為 gb2312 (轉碼)
print(type(s))

#如下方打印出來的是 bytes
>> <class 'bytes'>

print(s)
#因為編碼已經不是 utf-8 了,所以打印出來的是 16進位制的
>> b'\xd6\xd0\xce\xc4'

a = s.decode('gb2312')  #將指定的編碼轉成 Unicode 內建編碼 (解碼)
print(a)

>> 中文

如上方例子,我在 python 裡面其實可以將任意內容隨意轉換編碼,並且解碼,而且預設的編碼為 Unicode 萬國碼,所以用 python 可以隨意轉換內容,後期操作檔案,也可以隨意轉換編碼進行新的儲存,這樣就全自動化了,根本不需要人工手動的去操作,節約了很多的人工成本。

bytes

更具上面的程式碼其實,執行的第一步,可以看到打印出來的是一個叫做 bytes 的類,那麼什麼又是 bytes 呢?

byte 就是一個位元組,一個文字是由很多個位元組組成的,所以在 byte 後面加了一個 s 代表複數,所以是 bytes ,我們的資料都是以 16進位制 進行儲存的,當解析出來的時候我們所看到的資料其實已經通過 Unicode 進行轉碼了,變成我們能看懂的資料,但是如果我們用 encode 方法轉碼後他的型別其實就是 16進位制16進位制 在計算機中讀取還是根據二進位制的資料來讀取的,所以在這裡 16進位制 也可以稱之為 bytes 型別。

其實我們也可以在 python 程式碼中直接定義 一個 bytes 型別如:

str = b"張三"
print(type(str))

>> <class 'bytes'>

在字串前面加上一個 b 代表的就是 bytes 型別的資料,好了關於編碼就基本結束了。