Python中的字元編碼

2022-04-11 15:26:00 字數 1681 閱讀 4043

#

cpu、記憶體、硬碟是計算機的三大核心硬體。

#1.任何軟體在執行之前,都是以二進位制的格式儲存在硬碟當中的。

#2.當軟體被開啟時,硬碟將資料載入到記憶體中,cpu再從記憶體中讀取資料被執行。

#3.軟體在執行過程中產生的資料都是存放於記憶體中,若想永久儲存資料,則得轉移到硬碟中

#有的小夥伴可能會想到:那在電腦開機時,記憶體中是沒有資料的,作業系統的資料也存在於硬碟。

#cpu自然沒法從記憶體中讀取資料而完成的開機操作?

#實際上,cpu的設計使得每次cpu啟動時,它的程式計數器都從實現確定的特定位址開始。

#cpu就期望在這個位址上找到程式要執行的第一條指令。計算機的一小部分記憶體就用特殊的非易失性技術製造的(一小部分硬碟)

#這一小部分,就是cpu期望找到的初始程式。

#

開啟乙個檔案編輯器,nodepad++,

#文字編輯器從硬碟中載入資料到記憶體。

#文字編輯器將其載入的內容顯示在螢幕上

#

啟動python直譯器,相當於啟動了乙個文字編輯器。

#python直譯器將硬碟上test.py的資料載入到記憶體中

#python直譯器剛讀入到記憶體中的內容,識別python語法並執行。

#

相同點,前兩個階段二者是一樣的,都是從硬碟中載入資料。

#不同點:在階段3時,對資料的處理方式不一樣

#1.直譯器根據python語法去解釋執行**

#2.文字編輯器直接將內容顯示在螢幕上

字元是表示人類語言的基本單位。

如英文本母、中文漢字、日文等都有自己的字元體系。

而計算機是基於電路,0和1是計算機語言的基本單位。

想要將人類語言資料儲存在計算機中就必須找到一種對應關係。

如用 0110 0001 表示字母a, 0110 0010表示字母b。

1個位元(bit)就表示1位。8個位元則是2**8總共可以表示256個字元。

對於計算機的發源地美國,8個bit的編碼表足夠表示常用的字元。這就是最早應用的ascii表。

計算機經過幾十年的飛速發展,已被廣泛的應用於各個國家。問題來了,以中文為例,

沒有一種編碼錶能作為漢字和二進位制位元組的轉換,我國就指定了gbk編碼標準。其他國家也一樣,

如日本有shift-jis、南韓有euc-kr。

這樣一來,各國本身的編碼問題就解決了。但是更大的問題就來了,隨著世界變成地球村,各國的檔案都有可能在其他國家被應用。但由於編碼方式的不同,在硬碟裡 0000 1111,在gbk裡可能表示『啊『

在ascii裡可能表示乙個符號』!『。這就導致了亂碼的發生。

怎麼辦呢?

後來就產生了 電腦科學領域裡的一項業界標準 ,unicode(萬國碼),unicode由2個位元組來表示乙個字元。這樣unicode就能表示2*16=65536個字元,足以表示全球所有國家的字元。

但對於英文來說:

1.資料在硬碟中的占用空間變大了

2.i/0次數翻了一倍(最致命的問題)

所以unicode被廣泛應用於記憶體中。但從記憶體將資料儲存到硬碟的過程當中,又會經過一次編碼,以盡可能少的減輕上面兩個問題。

從記憶體到硬碟的儲存過程中,可指定編碼格式。

相應地,檔案執行時,從硬碟載入資料到記憶體中需要按照儲存的編碼格式來開啟才可保證不亂碼。

Python 中的字元編碼

1 str型別可以理解為乙個二進位制block,或multibyte 2 multibyte str.decode unicode 3 unicode str.encode multibyte str binary block 4 unicode str 的操作引數也應為unicode,如 unic...

python 中字元編碼

背景 在跑hadoop是python指令碼經常要處理不同的格式的編碼資料,主要字元編碼 ascii,gb18030,unicode,utf 8等 python有兩種字串 bytestring hello world in my default locale unicodestring u hello...

python中的字元編碼問題

總結python的字元編碼 應該在 最初兩行內包含 usr bin env python coding utf 8 獲得 設定系統的預設編碼 sys.getdefaultencoding sys.setdefaultencoding utf 8 獲得檔案系統的檔名的編碼 sys.getfilesys...