當前位置:
首頁 > 最新 > 零基礎學習 Python 之字元編碼

零基礎學習 Python 之字元編碼

寫在之前

大家好,這裡是零基礎學習 Python 系列,在這裡我將從最基本的Python 寫起,然後再慢慢涉及到高階以及具體應用方面。我是完全自學的 Python,所以很是明白自學對於一個人的考驗,所以在這裡我會盡我最大的努力,把 Python 儘可能簡單的表述清楚,讓更多想要學習 Python 的朋友能夠入門。同時寫這個教程也算是對自己之前所學知識的一個鞏固和提高,喜歡的朋友們可以點個關注,有問題歡迎隨時和我交流。本文所有的代碼編寫均是 Python3 版本。

在實際的操作中,字元編碼是我們必然會遇到的一個「坑」,在我一開始的打算中我是不準備寫這個知識點的,但是我怕朋友們在之後遇到的時候不知道是什麼,而且它又是那麼的重要,因為它不單單是計算機中的一個基礎知識,而且還是一個有歷史過程的事情。

編碼

要講字元編碼,首先我們要從編碼開始談起。編碼這個東西如果單說具體的定義的話可能很難理解,下面我用一個例子解釋一下。

大家應該都看過戰爭片,一般要強攻的時候,長官下令衝鋒,然後就有一個小兵拿起小喇叭吹衝鋒號,這裡其實就是一次編碼,長官下達衝鋒命令,小兵將這個命令編碼為衝鋒號「嘟嘟嘟嘟」的聲音,然後聲音在空氣中傳播,士兵們聽到之後一般都會知道這是衝鋒的意思,不會聽成是打呼嚕的聲音,長官下達的命令你可能離著遠了聽不清啥意思,但是一聽衝鋒號吹起來,接受過訓練的人就知道這是要衝鋒的意思,不會理解錯意思,這也是編碼的優勢所在。這裡要說的是士兵接收到進攻命令,這叫做解碼,解碼完畢後士兵們明白了,然後才行動。

當然以上過程說的很簡單,真實的編碼和解碼過程肯定比這個複雜的多,但是總的原理,其實就是這麼個意思。

字元編碼

編碼我們說完了,那我們再來說說什麼是字元編碼。我們都知道計算機只能處理數字 (因為電是驅使計算機工作的基本,而電的特徵就是高低電平,高電平是 1,低電平是 0),而我們編程的目的是為了讓計算機給我們幹活,從而實現我們的目的,而編程說白了就是一堆字元,所以一堆字元想要驅使計算機幹活,而計算機又只能處理數字,所以說這裡面涉及到一點,那就是從字元到數字的這麼一個過程,這個過程其實就是一個字元如何對應一個特定數字的標準,這個標準就是字元編碼。

字元編碼的發展史

計算機的字元編碼並不是一蹴而就的,而是有一個發展的過程。

1. ASCII 碼

20 世紀 60 年代,計算機發明的早期,那時候美國是計算機領域的大哥,於是他們自己制定了一套字元編碼,解決了英文和二進位間的對應關係,這個被稱為 ASCII 碼。

ASCII 碼是基於拉丁字母的一套電腦編碼系統,主要用於現代英語,因為英語用 128 個字元就夠了,但是計算機又不單單只是英語系國家用,如果表示其他語言,128 個字元是遠遠不夠的,於是其他的國家,都是在 ASCII 碼的基礎上,又發明了很多別的編碼。

2. Unicode 碼

在編碼上,由於出現了很多不同的形式,於是就出現了 「亂碼」 ,比如互發郵件的雙方,如果使用的編碼方式不一樣,那麼收信人就只能看亂碼了。於是 Unicode 應運而生,只看它的名字也應該知道,就是要統一符號的編碼。

Unicode 對世界上絕大多數的文字系統進行了整理,編碼,使得電腦可以用更為簡單的方式來呈現和處理文字,它伴隨著通用字符集的標準而發展,同時也以書本的形式對外發表。 Unicode 直到今天仍在不斷的增修,每個新版本都加入了更多的字元,它涵蓋的數據除了視覺上的字形,編碼方法,標準的字元編碼外,還包含了諸如大小寫字母等的字元特性。它雖然這麼能幹,你也要保持清醒,它也不是完美的,仍需繼續改進。

3. UTF - 8

UTF 就是 Unicode 的實現方式,而 UTF -8 是現在互聯網上流傳最廣的 Unicode 實現方式,雖然它只是 Unicode 實現方式中的一種,但也隱約有武林盟主的地位。

UTF - 8 是一種針對 Unicode 的可變長度字元編碼,也是一種前綴碼,它可以用來表示 Unicode 標準中的任何字元,它也是現在電子郵件,網頁以及其他存儲或者發送文字的應用優先採用的編碼。

所以,我們在以後的 Python 程序開發中,最好都要用 UTF - 8 編碼。

Python 字元編碼

在 Python3 中,所有的字元串都是 Unicode 字元串。

如果你想查看一下當前環境的編碼格式,可以用 sys 中 的 getdefaultencoding() 函數查看。

>>> import sys

>>> sys.getdefaultencoding()

"utf-8"

因為 Python3 支持的是 Unicode,所以每個漢字都對應著一個編碼數字,如果你想直到某個漢字對應的編碼數字,可以用 ord() 函數,同樣如果你想知道某個數字對應的漢字,可以用 chr() 函數。

>>> ord("李")

26446

>>> chr(26446)

"李"

最後在說一個函數 encode() ,這個函數能夠將 Unicode 編碼的字元串轉化為其它編碼,默認的是 UTF - 8,具體的應用如果有興趣的話可以用 help(str.encode) 查看。

寫在最後

感謝你能看到這裡,希望我寫的東西能夠讓你有到收穫,但是我還是希望我在文章里插入的代碼,你們能自己動手試一下,都很簡單。原創不易,每一個字,每一個標點都是自己手敲的,每次基本都要花三四個小時的時間去做這件事,初心是為了分享,所以希望大家能多給點支持,該關注關注,該點贊點贊,該轉發轉發,有什麼問題歡迎在後台聯繫我,也可以在公眾號找到我的微信加我。

參考資料:

1. Python(字元編碼)- Z賀 - 博客園。

2.廖雪峰的官方網站 Python 教程。

The end。

希望大家能夠多多關注我

掃一掃下方的二維碼

把我帶回家,嚶嚶嚶…

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

Python工程師可從事多領域編程工作,最受喜歡是人工智慧工程師
十五分鐘了解 Python 並發編程

TAG:Python |