字串編碼相關知識

2022-06-09 12:03:11 字數 2042 閱讀 5791

一、編碼的種類情況

二、   unicode 與 uft

由於每個國家都有自己的編碼規則,其僅涵蓋本國字元,無其他國家字元的對應關係,所以unicode(萬國碼)應運而生,它涵蓋了全球所有的文字和二進位制的對應關係。

unicode 起到2個作用:

直接支援全球所有語言,每個國家都可以不用再使用自己之前的舊編碼了,用unicode就可以了。(就跟英語是全球統一語言一樣)

unicode包含了跟全球所有國家編碼的對映關係。

但是使用unicode表示乙個字元,太浪費空間。例如:利用unicode表示「python」需要12個位元組才能表示,比原來ascii表示增加了1倍,為了解決儲存和網路傳輸的問題,utf便誕生了。

所以總的來說,utf 是為unicode編碼設計的一種在儲存 和傳輸時節省空間的編碼方案。

三、字元怎麼存到硬碟上的?

答:是按某種編碼轉換為二進位制儲存在硬碟上的。

在此需要注意的是:以何種編碼存到硬碟上,再從硬碟讀取出來時,就必須以何種編碼讀,否則亂碼就出現了。

四、編碼轉換

先來看看python3 執行**的過程:

直譯器找到**檔案,把**字串按檔案頭定義的編碼載入到記憶體,轉成unicode

把**字串按照語法規則進行解釋

所有的變數字元都會以unicode編碼宣告

我們知道,當你將乙個以utf-8編碼的程式拿到自己的windows系統上執行,也是會亂碼的,因為

只有2種情況 ,你的windows上顯示才不會亂:

字串以gbk格式顯示

字串是unicode編碼

當你的程式是gbk編碼時,拿到國外的電腦上使用是會亂碼的,因為人家根本不支援中文呀,那麼怎麼辦呢,你有如下辦法:

讓美國人的電腦上都裝上gbk編碼

把你的軟體編碼以utf-8編碼

>>可是以上兩條路似乎都不好走啊,那該怎麼辦哩??

>>不要著急,山人自有妙計。你找乙個既懂美國語言的,又懂中文的翻譯官不就得了麼!

>>這個翻譯官是誰呢?

>>unicode呀!

是的,前面不是講了,unicode支援全球所有語言,而且包含了跟全球所有國家編碼的對映關係,所有系統、程式語言都預設支援unicode,所以可以把它作為乙個轉換器(翻譯官),實現不同編碼規則之間的轉換。

具體方法就是,decode(解碼) 和encode(編碼),具體步驟如圖:

**(py3下執行):

s = "好好學習"

print(type(s)) # 列印字串型別

s1 = s.encode("gbk") # 編碼

print(s1, type(s1))

s2 = s1.decode("gbk") # 解碼

print(s2, type(s2))

執行結果:

b'\xba\xc3\xba\xc3\xd1\xa7\xcf\xb0' 好好學習
當然,python2並不會自動的把檔案編碼轉為unicode存在記憶體裡, 那就只能你自己人肉轉。py3 會自動把檔案編碼轉為unicode存入記憶體。

五、python3與python2的編碼區別

python3:

1、檔案預設編碼是utf-8;

2、字串編碼是unicode;

3、py3將str和bytes做了明確區分,str就是unicode格式的字串,bytes就是單純的二進位制。

python2:

1、檔案預設編碼是ascii;

2、字串編碼是ascii(如果檔案頭申明了gbk、utf-8等編碼形式,則字串的編碼就是gbk、utf-8等格式);

3、在py2中unicode是一種單獨的型別,使用是需要單獨申明,如:s = u"美麗」;

4、在py2中,str和bytes兩種型別界限比較模糊,可以說str就是bytes,bytes就是str。

字串相關知識

1.字串長度 strlen 求字串長度時,遇到 0 就停下,前面所經過的字元數,就是字串的長度,不包括 0 注意 該函式的返回值為無符號整數。例子 int main else return 0 上述 輸出為什麼呢?因為返回值無符號數,無符號數 無符號數永遠是大於等於0的,所以輸出了if分支的語句。2...

字串相關知識

可不使用new方式 當從字串池中查詢,沒有時,則需要字串建立 例子 string prompt hello,world 使用後new建立方式 每次建立乙個新物件 例子 string prompt new string hello,world 字串相等比較 equals 字元名稱.equalsigno...

字串操作相關知識 index and find

str1 hello word print str1.startswith h 6,10 判斷字串是否以哪個開頭,也可以指定範圍 print str1.endswith 判斷字串是否以哪個結尾,也可以指定範圍 index查詢與find查詢的異同 find num str1.find word 查詢要...