2021年7月6日 星期二

Python 基礎:認識編碼與字元集

眾所皆知電腦只認得數字的 0 與 1 ,

一般使用的文字都需要經過編碼的動作將其存成數字,

最後再傳給電腦計算處理,

而編碼的規則就是依照字元集來進行,

今天就簡單介紹下

Python 基礎:認識編碼與字元集


首先認識下幾個常見的編碼

ASCII 碼

電腦最小的儲存單位是 bit (位元),

將一個字元以 8個位元由 0 與 1 組成的數字表示,

就成了所謂的 ASCII 表。

在 Python 中,

使用

chr(x)

來輸出一個 ASCII 或 Unicode 字元。

例如: ASCII 表的 97 代表著英文字母: a

Unicode 碼

ASCII 碼對於英文語系的國家在使用上是不會有多大問題的,

不過地球上有許多不同的語言,

而 ASCII 能容納的字元有限,

為了能讓地球上所有的電腦能夠溝通,

所以有 Unicode碼的設計。

在 Python 中,

使用 

ord(x)

來輸出一個 Unicode 的字元。

utf-8 碼

utf-8 是針對 Unicode字元集的可變長度編碼的方式,

在網際網路上使用特別廣泛,

它使用了 1 ~ 4 個 byte 來表示一個字元。



實際應用

以上就是關於各編碼的字元集的介紹,

在 Python 中,

沒有所謂的字元 ( character ) 資料型態,

即使是一個字元的也稱之為字串 ( string )。

在 Python 內部使用 str 這個資料型態沒有問題,

當今天要與外界交換資料時,

特別是在網際網路上以及使用中文的時候,

常出現亂碼,

這是因為編碼型態不同造成,

所以必須將原有的 str 轉為 bytes 型態來使用。

在字串前面加上一個 b,

b'字串'

表示此字串的 bytes 資料。

字串轉 bytes 資料

將字串轉為 bytes資料稱之為編碼,

使用 encode() 來轉換:

stringA = '李'

stringA_to_Bytes = stringA.encode('字元集')

這字元集,

就是使用 "ascii"、"utf-8"、"unicode" 等等上述的編碼方式

bytes 資料轉字串

相反的,

將 bytes資料轉為字串到 Python 來使用,

則需要以 decode() 來轉換:

stringB = stringA_to_Bytes.decode('字元集')

以同樣的字元集來解碼即可。


同樣的字使用不同的編碼方式會有不同的值,

若在程式設計的過程中出現亂碼,

多為編碼的問題所致。

沒有留言: