Python中的字符串和編碼
搞清楚了ASCII丁眼、Unicode、UTF-8的關(guān)系后痴怨,我們總結(jié)下現(xiàn)在計算機系統(tǒng)通用的字符編碼工作方式:
在計算機內(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保存到文件反浓。
Python中的字符串轉(zhuǎn)換成byte數(shù)組
encode('編碼')
使用方法
轉(zhuǎn)成'gb2312'格式bytes類型(以字節(jié)為單位的類型)
'你好'.encode('gb2312')
回車得到結(jié)果
b'\xc4\xe3\xba\xc3'
轉(zhuǎn)成'utf-8'格式bytes萌丈,也就同理了
'你好'.encode('utf-8')
回車得到結(jié)果
b'\xe4\xbd\xa0\xe5\xa5\xbd'
需要注意的是,轉(zhuǎn)成bytes之后雷则,每一個字符都只占用一個字節(jié)
將第二點反轉(zhuǎn)一下辆雾,就是將bytes類型「解碼」成對應(yīng)編碼的字符串
decode('utf-8')
:以'utf-8'方式解碼
decode('utf-8',errors='ignore')
:將部分能解碼的進行解碼,其余部分直接忽略
示例
將gb2312的bytes進行解碼
b'\xc4\xe3\xba\xc3'.decode('gb2312')
回車輸出
'你好'
但是如果你輸入錯誤的解碼方式月劈,會直接報錯
>>> `b'\xc4\xe3\xba\xc3'.decode('utf-8)``
File "<stdin>", line 1
`b'\xc4\xe3\xba\xc3'.decode('utf-8)`
^
SyntaxError: invalid syntax
所以度迂,記住你的編碼方式藤乙,在解碼的時候不要寫錯,其實英岭,我們一般都使用utf-8方式
%(百分號)占位符的使用
幾個示例:
示例一湾盒、
這個例子很多人搞不懂
%2d的意思是:如果你輸入的是一位數(shù)湿右,那么前方會補全空格,兩位數(shù)以上則失效
%02d的意思是:如果輸入的是一位數(shù)诅妹,那么前方會補全0,兩位數(shù)以上則失效
print('%2d-%02d' % (3,1))
回車,輸出
_3-01
注意:3前邊那個下劃線是我故意寫的毅人,為的是注意到那其實是有一個空格了
示例二吭狡、
'%s還給你錢%.2f人民幣'%('小明',123.53)
回車輸出
小明還給你錢123.53人民幣
示例三、
小明的成績從去年的72分提升到了今年的85分丈莺,請計算小明成績提升的百分點划煮,并用字符串格式化顯示出'xx.x%',只保留小數(shù)點后1位:
print('小明成績提升了%.2f%%'%((85-72)/72*100))
回車輸出
小明成績提升了18.06%
or
>>> a=72
>>> b=85
>>> scale=(b-a)/a
>>> scale
0.18055555555555555
>>> print('小明增長了%.2f%%'%(scale*100))
小明增長了18.06%