一、編碼的種類情況
二、 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 查詢要...