本節重點
補充知識點:三元運算
三元運算又稱為三目運算,是對簡單的條件語句的簡寫,如:
if 條件成立:
val = 1
else:
val = 2
改寫成三元運算:
val = 1 if 條件成立 else 2
c#中的寫法 int i = 條件成立?1:2
由於每個國家都有自己的字元編碼方式,所以其對應關係也覆蓋了自己國家的字元,但是以上編碼都存在侷限性,即:僅覆蓋本國字元,無其他國家字元的對應關係,應運而生出現了萬國碼,他覆蓋了全球所有的文字和二進位制的對應關係。
uncode起到了2個作用:
1.直接支援全球所有語言,每個國家都可以不用再使用自己之前的舊編碼了,用uncode就可以了。
2.unicode包好了全球所有國家編碼的對映關係。
unicode解決了字元和二進位制的對應關係,但是使用unicode表示乙個字元,太浪費空間。例如:unicdoe表示「python」需要12個位元組才能表示,比原來用ascii多了一倍,這在進行網路傳輸,和硬碟儲存時是不能容忍的。
為了解決儲存和網路傳輸的問題,出現了額unicode tranformation format,學術名utf,即對unicode進行轉換,以便於在儲存和網路傳輸時可以節省空間!
總結:utf是為unicode編碼設計的一種在儲存和傳輸時節省空間的編碼方案。
無論以什麼編碼在記憶體裡顯示字元,存在硬碟上都是2進製。
要注意的事,存到硬碟上時是以何種編碼存的,再從硬碟上讀出來時,就必須以何種編碼讀,要不然就亂了。
雖然有了unicode和utf-8,但是由於歷史問題,各個國家依然在大量使用自己的編碼,比如中國的windows,預設編碼就是gbk,而不是utf-8。
基於此,如果中國的軟體出口到美國,在美國人的電腦上就會顯示亂碼,因為他們沒有gbk編碼。
為了解決這個問題,就需要使用到unicode的第2個作用,即unicdoe和各國編碼的對映關係。
gbk開發的軟體,unicode能自動知道他在unicode中的編碼是什麼。這樣一來,無論你以什麼編碼儲存的資料,只要你的軟體吧資料從硬碟裡讀到記憶體裡,轉成unicode來顯示,就可以了。由於所有的系統、程式語言都預設支援unicode,那你的bgk軟體放在美國電腦上,載入到記憶體裡,變成了unicode,中文就可以正常顯示了。
1.直譯器找到**檔案,把**字串按檔案頭的定義的編碼載入到記憶體,轉成unicode。
2.把**字串按語法進行解析
3.所有的變數字元都會以unicode編碼宣告
根據上述所示,python3可以直接讀取硬碟上以utf-8編碼格式的.py檔案,因為python3會把utf-8轉成unicode再展示。但是,並不是所有的軟體預設編碼都是unicode,python2就不是。python2依然使用的是ascii編碼方式,當python2開啟utf-8格式的檔案時會出現亂碼。解決的方案有兩個,一是python2以utf-8格式開啟檔案,二是python2以unicode格式開啟檔案。這時就需要用到編碼轉換。
我們來看看py3自動把檔案編碼轉為unicode是呼叫了什麼方法。
utf-8 --> decode解碼 -->unicode
unicode --> encode編碼 --> gbk / utf-8
python2中bytes==str,字串就是乙個個用16進製表示的2進製位元組,之所以以16進製制來表示,是為了增加可讀性。我們稱之為bytes型別,即位元組型別,它把8個二進位制一組稱為乙個byte,用16進製制來表示。除此之外,python2裡還有乙個單獨的型別unicode,把字串解碼後,就會變成unicode。
python3中str和bytes分開了,str就是unicode格式的字元,bytes就是單純的二進位制。
注意:python只要出現各種編碼問題,無非是**的編碼設定出錯了
常見的編碼錯誤原因有:
掌握了編碼之前的關係後,挨個排錯就好了
Python學習系列(三) 字串
乙個月沒有更新部落格了,最近工作上有點小忙,實在是沒有堅持住,丟久又有感覺寫的必要了,可見本人的堅持精神不佳,本系列沒有任何目的,純屬業餘學習,或者說是一時興趣所致。通過本文,能夠學習字串的基本操作,日積月累,多多練習,學到了,會用了才是王道。一 基本概念 1,關於轉義問題 1 方式 s hello...
Python學習筆記(三) 字串
字串索引 python字串索引從0開始,負索引從 1開始。0表示第乙個字元,1表示最後乙個字元。字元都有對應的編碼,可以使用ord a 函式檢視。熟悉unicode和ascii編碼。幾種常見的字元 反斜槓 單引號 雙引號 換行符 n 回車 r 和水平製表符 t 標準字串函式,在 中顯示 常用標準字串...
C 複習之路三 字串 陣列
一 標準庫型別 string string表示可變長字串行,使用string型別前一定要包含string的標頭檔案!同時string是定義在命名空間std中的,所以使用之前要用using 宣告一下。例如 include using namespace std 比較string型別 可以用關係運算子 ...