計算機只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。由于計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機里,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母a的編碼是97。
但是要處理中文至少需要兩個字節,而且還不能和ASCII編碼沖突,所以,中國制定了GB2312編碼,用來把中文編進去。全世界有上百種語言,為了擴充ASCII編碼,用于顯示本國的語言,不同的國家和地區制定了不同的標準,由此產生了 GB2312, BIG5, JIS 等各自的編碼標準。各國有各國的標準,就會不可避免地出現沖突,結果就是,在多語言混合的文本中,顯示出來會有亂碼。因此,Unicode應運而生。Unicode把所有語言都統一到一套編碼里,這樣就不會再有亂碼問題了。
ps:此處不細說Unicode編碼轉化為“可變長編碼”的UTF-8編碼,有興趣的讀者可以自行查閱資料。
這里python3.x版本的改進就很是使用。
在2.x版本中:
>>> str="python 2.x 版本輸出中文字符一點都不方便">>> str'python 2.x /xb0/xe6/xb1/xbe/xca/xe4/xb3/xf6/xd6/xd0/xce/xc4/xd7/xd6/xb7/xfb/xd2/xbb/xb5/xe3/xb6/xbc/xb2/xbb/xb7/xbd/xb1/xe3'>>>
所以說,編碼有時候造成的BUG會讓人痛不欲生,歷史遺留問題,Python 2.x版本雖然支持Unicode,但在語法上需要'xxx'和u'xxx'兩種字符串表示方式。
而在Python 3.x版本中,'xxx'和u'xxx'被統一成Unicode編碼,即寫不寫前綴u都是一樣的,而以字節形式表示的字符串則必須加上b前綴:b'xxx'。
而在3.x版本中:
>>> str="python 3.x 版本輸出中文字符很方便">>> str'python 3.x 版本輸出中文字符很方便'>>>
我們經常會輸出像 'XXX先生/女士,您好!您本月信用卡的消費數額為XXXX元,透支XXXX元' 這樣的句式,因此我們需要格式化輸出。
常見的占位符有:
%d 整數 %f 浮點數 %s 字符串 %x 十六進制整數
格式化整數和浮點數還可以指定是否補0(最后一位四舍五入)。
>>> '%f' %1.23456789'1.234568'>>> '%.3f' %1.23456789'1.235'
如果不太確定用哪個,可以用%s,它會把任何數據類型轉換為字符串。
>>> '%s先生/女士,您好!您本月信用卡的消費數額為%d元,透支%d元' %('皇家理工',6666,2222)'皇家理工先生/女士,您好!您本月信用卡的消費數額為6666元,透支2222元'>>> '%s先生/女士,您好!您本月信用卡的消費數額為%s元,透支%s元' %('皇家理工',6666,2222)'皇家理工先生/女士,您好!您本月信用卡的消費數額為6666元,透支2222元'>>>
當日小結:字符編碼格式,在2.x主流的日子還是個痛啊。
新聞熱點
疑難解答