人人都能學會的python程式設計教程3:字串和編碼

程式設計老司機發表於2018-05-10

字串

在python3中已經全面支援中文。

由於Python原始碼也是一個文字檔案,所以,當你的原始碼中包含中文的時候,在儲存原始碼時,就需要務必指定儲存為UTF-8編碼。當Python直譯器讀取原始碼時,為了讓它按UTF-8編碼讀取,我們通常在檔案開頭寫上這兩行:

#!/usr/bin/env python3

-- coding: utf-8 --

Python提供了ord()函式獲取字元的整數表示,chr()函式把編碼轉換為對應的字元:

寶寶都能學會的python程式設計教程3:字串和編碼

要計算str包含多少個字元,可以用len()函式:

在Python中,採用的格式化方式和C語言是一致的,用%實現,舉例如下:

'Hi, %s, you have $%d.' % ('oldriver', 1000000)'Hi, oldriver, you have $1000000.'

佔位符%d替換內容為整數,%f替換浮點數,%s替換字串,%x替換十六進位制整數。

print('%2d-%02d' % (3, 1)) 3-01 print('%.2f' % 3.1415926) 3.14 另一種格式化字串的方法是使用字串的format()方法,它會用傳入的引數依次替換字串內的佔位符{0}、{1}……,不過這種方式寫起來比%要麻煩得多:

'Hello, {0}, 股價上升了 {1:.1f}%'.format('小劉', 17.125)

'Hello, 小劉, 股價上升了 17.1%'

編碼

上期我們簡單的解釋過字串這種資料型別,本期我們詳細解釋與字串密切相關的字元編碼。

在計算機的世界裡所有的資料最終都會變成0和1。最早的計算機在設計時採用8個位元(bit)作為一個位元組(byte),所以,一個位元組能表示的最大的整數就是255(二進位制11111111=十進位制255),如果要表示更大的整數,就必須用更多的位元組。由於計算機是美國人發明的,因此,最早只有127個字元被編碼到計算機裡,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母B的編碼是66,小寫字母y的編碼是121。

但是要處理中文顯然一個位元組是不夠的,至少需要兩個位元組,而且還不能和ASCII編碼衝突,所以,中國製定了GB2312 編碼,用來把中文編進去。你可以想得到的是,全世界有上百種語言,各國有各國的標準,就會不可避免地出現衝突,結果就是,在多語言混合的文字中,顯示出來會有亂碼。

因此,Unicode應運而生。Unicode把所有語言都統一到一套編碼裡,這樣就不會再有亂碼問題了。

Unicode標準也在不斷髮展,但最常用的是用兩個位元組表示一個字元(如果要用到非常偏僻的字元,就需要4個位元組)。現代作業系統和大多數程式語言都直接支援Unicode。

現在,捋一捋ASCII編碼和Unicode編碼的區別:ASCII編碼是1個位元組,而Unicode編碼通常是2個位元組。

用記事本編輯的時候,從檔案讀取的UTF-8字元被轉換為Unicode字元到記憶體裡,編輯完成後,儲存的時候再把Unicode轉換為UTF-8儲存到檔案:

人人都能學會的python程式設計教程3:字串和編碼

瀏覽網頁的時候,伺服器會把動態生成的Unicode內容轉換為UTF-8再傳輸到瀏覽器:

人人都能學會的python程式設計教程3:字串和編碼

今天的python教程就講到這裡,下期我們講解python的list和tuple,敬請期待!

相關文章