眾所皆知電腦只認得數字的 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('字元集')
以同樣的字元集來解碼即可。
同樣的字使用不同的編碼方式會有不同的值,
若在程式設計的過程中出現亂碼,
多為編碼的問題所致。
沒有留言:
張貼留言