python中 encode,decode,unicode,utf-8

以下是我對編碼的一些體會,只是很簡單的根據經驗來寫的,並沒有深入研究編碼問題。

如果想要深入研究,可以看一看這篇文章UNICODE,GBK,UTF-8區別

在 python 源代碼文件中,如果你有用到非ASCII字符,則需要在文件頭部進行字符編碼的聲明,聲明如下:

# code: UTF-8

因爲python 只檢查 #、coding 和編碼字符串,所以你可能回見到下面的聲明方式,這是有些人爲了美觀等原因才這樣寫的:

#-*- coding: UTF-8 -*-

常見編碼介紹:

GB2312編碼:適用於漢字處理、漢字通信等系統之間的信息交換
GBK編碼:是漢字編碼標準之一,是在 GB2312-80 標準基礎上的內碼擴展規範,使用了雙字節編碼
UTF-8編碼:是 Unicode Transformation Format - 8 bit 的縮寫, UTF-8 是 Unicode 的一種實現方式。它是可變長的編碼方式,可以使用 1~4 個字節表示一個字符,可根據不同的符號而變化字節長度。
ASCII碼:是對英語字符和二進制之間的關係做的統一規定
Unicode碼:這是一種世界上所有字符的編碼。當然了它沒有規定的存儲方式。

好了,現在來總結了

總的來說,ASCII,GBK*,UNICODE
* 這三個規定了字符與二進制碼之間的對應關係,是字符與編碼之間的一一對應
* ASCII 佔一個字節,只記錄了一些基本的字符
* GBK* 佔兩個字節,他包含了 ASCII 和 所有的中文 字符
* UNICODE 佔兩個字節,包含了世界上所有的語言字符!所有的!

但是!

unicode 並沒有規定統一的存儲方式,於是就出現了utf-8.

什麼意思呢?

就是說,文本如果按照GBK的編碼方式來存儲的話,電腦是可以識別並正常讀取的,但按照UNICODE的編碼方式來存儲的話,電腦是無法識別出來的(2字節16位的所有組合跟 GBK 和 UNICODE 可不是一一對應的關係),最後只能以亂碼的形式輸出了 0。0

所以,如果要以unicode 存儲的話,那必須聲明存儲方式才行,utf-8 就是其中一個存儲方式。

好了,編碼關係知道了,那說說encode與decode吧

encode 本意就是編碼

encode 就是吧unicode字符 按照規定的方式進行編碼,在內存中,或者在硬盤上。

decode 就是把編碼解碼成 unicode 字符,以供我們來識別。

要知道,信息傳輸都是以str 來傳輸的,當信息傳輸到其他地方的話,如果當地文件不是跟原來的編碼方式一樣,那就回出現亂碼。

假如說,文件中有一存儲着utf-8 的文件,一個python程序打開了,在一些情況下打開後可能呈現的形式就是亂碼,這種情況下只要encode一下就行了,因爲本來就是utf-8的形式。

但如果原來的文件是以 GBK 來存儲的,那麼打開文件後就得str.decode(’GBK’)來進行編碼轉換了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章