Python的編碼和解碼

2021-08-15 19:30:43 字數 1555 閱讀 7350

春節剛過,今天正式上班。首先在這裡給大家拜個晚年,祝大家在新年裡萬事如意,新春快樂。

今天我們來說乙個比較老的話題,關於python的編碼和解碼的問題。

首先簡單的來說,編碼就是把人類熟悉的語言轉化成計算機可以識別的語言,即0、1狀態位。而解碼則剛好相反,就是把計算機

能夠識別的**(0、1)轉化**類熟悉的語言。

計算機最早是在美國發明的,因此美國人只是對自己的語言進行了編碼,也就是我們熟悉的ascii碼,這種編碼就是把英文本母,

包括英文本元轉化成計算機語言。乙個ascii碼占用乙個位元組,即8位bit,這樣最多可以2^8=256個字元,對於英語來說足夠了。

舉個例子,i am wilson,在計算機中的儲存方式是0x49, 0x20, 0x61, 0x6d, 0x20, 0x57, 0x69, 0x6c, 0x73, 0x6f, 0x6e。當然

這裡面還涉及大小端的問題,在此不再贅述。

但是這樣的編碼對於漢語來說就有點力不從心了。漢語裡漢字那麼多,顯然256個字元的編碼是不夠的,那漢字在計算機中是如

何?為了處理漢字,國家首先設計了gb2312編碼,一共收錄了7445個字元,包括6763個漢字和682個其他符號。2023年又進行了

擴編,收錄了21886個符號。到了2023年再次進行擴編,共收錄了27484個漢字,同時還收錄了藏文,滿文等文字。但是每個國家都

有自己的文字,如果沒有乙個統一的編碼格式,大家很難交流,因此出現了unicode編碼,大家都把自己的編碼格式放在這個統一的

格式中,方便交流,unicode編碼使用2位元組來儲存符號,因此可以收錄2^16 = 65535個字元。

這樣編碼雖然解決了各國編碼統一的問題,但是每個字元要用兩個位元組來儲存,這樣儲存量似乎有些太大了,特別是有些字元可以

用乙個位元組來儲存的時候。因此為了節省計算機的儲存空間,就出現了utf-8編碼。這個編碼規則不再要求每個符號都用兩個位元組存

儲,而是將所有的字元和符號進行分類:ascii碼中的內容用1個位元組儲存,歐洲的字元用2個位元組儲存,東亞的字元用3個位元組儲存。

這樣編碼對於程式設計來說有很大的優勢,因為我們在程式設計時很少使用中文,絕大部分都是英文,這樣做可以節省很大的計算機空間。

python中的編碼和解碼

python2中有兩種字串型別,str存bytes資料,unicode型別存unicode資料。在python2在處理漢字時有時候會報錯,這是因為python2預設的編碼格式是ascii碼,如果資料全是ascii,那麼所有轉換都是正確的,但是一旦字串中有非ascii碼,比如漢字,那麼預設的解碼將會失敗,python2的直譯器悄悄掩蓋掉了byte到unicode的轉換。所以我們在檔案開頭位置宣告#coding:utf-8,其實就是要告訴直譯器,不要以預設的ascii編碼方式來解碼這個檔案,而是以utf-8來解碼

python3中也有兩種字串型別,str和bytes型別。str存unicode資料,bytes型別存bytes資料。python3預設的編碼方式是utf-8

python3不會以任意隱式的方式來混用str和bytes,而是將兩者區別清晰。因此你不能拼接字串和位元組包,也無法在位元組包裡搜尋字串。

以上就是今天的全部內容。

與您共勉

PYTHON編碼和解碼

從第一天接觸python就對解碼和編碼的問題很困惑,最近在學習網路資料爬蟲,又遇到了一系列的解碼和編碼問題,處理中文編碼問題真的好麻煩,這次真的需要好好填坑了。詳細內容下面的文章 python字串的編碼與解碼 encode與decode 字串在python內部的表示是unicode編碼,因此,在做編...

python中的編碼和解碼

計算機中常見的編碼方式有多種,英文一般是ascii編碼,其他有unicode,utf 8,gbk,utf 16等編碼。常見編碼方式 python中的編碼轉化 python內部的字串一般是unicode編碼,unicode是utf 8 gbk等編碼的父編碼,這些子編碼方式之間不能直接轉化,需要先轉化成...

python 編碼解碼

一種編碼想要轉成另一種編碼,需要先解碼成萬國碼 unicode,然後再從unicode轉成其他編碼。例如gbk格式想要轉成utf 8,需要先按照 gbk 的格式 decode 成 unicode,再從 unicode 格式 encode 成utf 8 python3預設使用utf 8編碼,故不用宣告...