學(xué)習(xí)地址:字符串與編碼
編碼講的非常好蒙保,引用一下:
在計算機內(nèi)存中,統(tǒng)一使用Unicode編碼叽讳,當(dāng)需要保存到硬盤或者需要傳輸?shù)臅r候追他,就轉(zhuǎn)換為UTF-8編碼。
用記事本編輯的時候岛蚤,從文件讀取的UTF-8字符被轉(zhuǎn)換為Unicode字符到內(nèi)存里,編輯完成后懈糯,保存的時候再把Unicode轉(zhuǎn)換為UTF-8保存到文件:
0.png
瀏覽網(wǎng)頁的時候涤妒,服務(wù)器會把動態(tài)生成的Unicode內(nèi)容轉(zhuǎn)換為UTF-8再傳輸?shù)綖g覽器:
0-1.png
所以你看到很多網(wǎng)頁的源碼上會有類似<meta charset="UTF-8" />的信息,表示該網(wǎng)頁正是用的UTF-8編碼赚哗。
Python字符串
在最新的Python 3版本中她紫,字符串是以Unicode編碼的,也就是說屿储,Python的字符串支持多語言贿讹。
由于Python的字符串類型是str,在內(nèi)存中以Unicode表示够掠,一個字符對應(yīng)若干個字節(jié)民褂。如果要在網(wǎng)絡(luò)上傳輸,或者保存到磁盤上,就需要把str變?yōu)橐宰止?jié)為單位的bytes赊堪。
Python對bytes類型的數(shù)據(jù)用帶b前綴的單引號或雙引號表示面殖。
反過來,如果我們從網(wǎng)絡(luò)或磁盤上讀取了字節(jié)流哭廉,那么讀到的數(shù)據(jù)就是bytes脊僚。要把bytes變?yōu)閟tr,就需要用decode()方法遵绰。
第一行注釋是為了告訴Linux/OS X系統(tǒng)辽幌,這是一個Python可執(zhí)行程序,Windows系統(tǒng)會忽略這個注釋椿访;
第二行注釋是為了告訴Python解釋器舶衬,按照UTF-8編碼讀取源代碼,否則赎离,你在源代碼中寫的中文輸出可能會有亂碼逛犹。
申明了UTF-8編碼并不意味著你的.py文件就是UTF-8編碼的,必須并且要確保文本編輯器正在使用UTF-8 without BOM編碼梁剔。
如果.py文件本身使用UTF-8編碼虽画,并且也申明了# -- coding: utf-8 --,打開命令提示符測試就可以正常顯示中文荣病。
練習(xí):
小明的成績從去年的72分提升到了今年的85分码撰,請計算小明成績提升的百分點,并用字符串格式化顯示出'xx.x%'个盆,只保留小數(shù)點后1位:
# _*_ coding: utf-8 _*_
s1 = 72
s2 = 85
r = (s2 - s1)/s1 * 100
print('小明成績提升了%%%.1f ' % r)
小明成績提升了%18.1