Python每日小知識(2):字符串和編碼

瞭解:ASCII編碼(是1個字節)仍然能夠完美滴處理數字,由於最先的時候只有127個字符編入計算機,可是遇處處理中文1個字節就有點捉襟見肘了,這時候咱們就腦袋疼了,因此中國製定了GB2312編碼,用來把中文編進去;而後各國也開始制定本身國家的編碼,日文有Shift_JIS,韓文有Euc_kr。多種語言的編碼又讓計算機苦不堪言了,因而各類亂碼就在頁面中上躥下跳了。時勢造英雄Unicode應運而生(一般是2個字節),把全部語言都統一到這編碼中,足以應對亂碼的負隅頑抗。而後對比了一下二者的區別:

clipboard.png

發現「競」用Unicode編碼十進制是31454,,二進制看上面,而字母「A」用Unicode編碼存儲還要在前面補八個0。

這就讓計算機大哥很不爽了,無故端本身胖了一圈(用Unicode編碼比用ASCII編碼須要多出一倍的存儲空間)爲了保持優雅的身姿就直接化身爲UTF-8編碼。網絡

這時候計算機就能夠把一個Unicode字符根據不一樣數字大小編碼成(1-6)個字節任君挑選了。(經常使用字母通常1個字節,漢字稍肥3個字節,只有那些歪瓜裂棗才4-6個字節)好了到這裏就能夠說是減肥成功了。(節省了空間)函數

clipboard.png

淺顯的認識一下Python3中的「字符串」小弟編碼

(1)首先要知道這傢伙是由Unicode編碼滴,支持多語言,看圖說話:

clipboard.png

(2)對於單個字符編碼這種小意思的事情,Python提供ord()函數然字符搖身一變就成了整數了,chr()就硬生生把編碼轉換爲對應字符啦。

小試牛刀:spa

clipboard.png

(3)若是你不當心知道了字符的整數編碼,還闊以用十六進制怎麼操做str滴:

clipboard.png

(4) 因爲Python字符串類型是str(廢話),以Unicode行走在內存中,一個字符對應
(1-6)個字節,但若是你要作一些不可描述的事,好比在網絡上傳輸或保存在你珍藏的磁盤上,就須要把str這廝變成以字節爲單位的bytes。Unicode表示的str經過encode()方法能夠編碼爲指定的bytes。

有圖有真相:3d

clipboard.png

沒看錯就是這麼簡單,可是要注意有中文的str這種異類是沒法用帥氣的ASCII編碼的,由於中文編碼的範圍超過了ASCII編碼所能承受帥氣的範圍,Python會報錯。

相反的若是咱們偷偷的從網絡或者磁盤讀取了(咳咳)字節流,那麼讀到的數據就是bytes。想讓它恢復本性,就得decode()方法出場了。code

clipboard.png

很明顯了若是bytes中包含沒法解碼的字節,decode()方法就會無情的報錯了。

若是它只是犯了一點點錯(一部分無效字節)咱們仍是能夠用(errors=’ignore’)拯救一下滴。blog

clipboard.png

腦殘的想計算一下str包含多少個字符,能夠用len()函數瞧瞧。

clipboard.png

不能厚此薄彼能計算str字符數,len()函數對bytes,就能夠計算字節數:

clipboard.png

*格式化 常常咱們都會不當心瞄到什麼‘親愛滴xxx您好!你上個月還欠我很多話費呢,總共xxx’這樣的字符串,對於 xxx的內容咱們是根據變量變化的,因此這就得格式化字符串的方式閃亮登場了。(用%實現)

clipboard.png

它可不止上面兩兄弟,來給你看看比較常遇到的幾胞胎,別搞錯了

clipboard.png

下面的操做是比較666滴ip

clipboard.png

解釋一下:03表明要補零,由於有三個數,因此就補兩個零便可; .2f 表示:保留小數點後兩位。

格式化整數和浮點數並制定是否補0和整數與小數的位數。內存

還有一種比較繁瑣的方法Fomat()原理:用傳入的參數依次替換字符串內的佔位符

clipboard.png

注意:字符串

傳入的參數要一一對應,還有要看清楚寫法好比上圖的:{0}、{1:.1f}%、{2}…

昨天我家商鋪盈利了6000元,今天盈利了8500元,計算一下盈利提高的百分點,用格式化字符串表示「xx.x%」,保留小數點後一位。

是時候表演真正的技術了

clipboard.png

其中:s1爲昨天盈利,s2爲今天盈利;

注意:

「%」是普通字符時用「%%」進行轉義

相關文章
相關標籤/搜索