Python 基礎與入門(3)---字符串和編碼

此學習筆記參考廖雪峰


字符串編碼的發(fā)展歷史

  1. 字符串也是一種數(shù)據(jù)類型湾盗,但是崇渗,字符串比較特殊的是還有一個編碼問題旋廷。由于計算機是美國人發(fā)明的,因此宙搬,最早只有127個字符被編碼到計算機里,也就是大小寫英文字母拓哺、數(shù)字和一些符號勇垛,這個編碼表被稱為ASCII編碼。
  2. 但是要處理中文顯然一個字節(jié)是不夠的士鸥,至少需要兩個字節(jié)闲孤,而且還不能和ASCII編碼沖突,所以础淤,中國制定了GB2312編碼崭放,用來把中文編進去。
  3. 全世界有上百種語言, 各國有不同的編碼鸽凶,就會不可避免地出現(xiàn)沖突币砂,結(jié)果就是,在多語言混合的文本中玻侥,顯示出來會有亂碼决摧。因此,Unicode應運而生。Unicode把所有語言都統(tǒng)一到一套編碼里掌桩,這樣就不會再有亂碼問題了边锁。
  4. ASCII編碼和Unicode編碼的區(qū)別ASCII編碼是1個字節(jié),而Unicode編碼通常是2個字節(jié)波岛。
  5. 用Unicode編碼比ASCII編碼需要多一倍的存儲空間茅坛,在存儲和傳輸上就十分不劃算。本著節(jié)約的精神则拷,又出現(xiàn)了把Unicode編碼轉(zhuǎn)化為“可變長編碼”的UTF-8編碼。UTF-8編碼把一個Unicode字符根據(jù)不同的數(shù)字大小編碼成1-6個字節(jié)煌茬,常用的英文字母被編碼成1個字節(jié)斥铺,漢字通常是3個字節(jié)坛善,只有很生僻的字符才會被編碼成4-6個字節(jié)。
  6. 在計算機內(nèi)存中眠屎,統(tǒng)一使用Unicode編碼剔交,當需要保存到硬盤或者需要傳輸的時候,就轉(zhuǎn)換為UTF-8編碼组力。

Python的字符串以及編碼與解碼

在最新的Python 3版本中抖拴,字符串是以Unicode編碼的燎字,也就是說阿宅,Python的字符串支持多語言候衍。

  • 對于單個字符的編碼,Python提供了ord()函數(shù)獲取字符的整數(shù)表示洒放,chr()函數(shù)把編碼轉(zhuǎn)換為對應的字符蛉鹿。
  • 在python3 中,文本總是Unicode往湿,由str類型表示,二進制數(shù)據(jù)則由bytes類型表示领追。字符串可以編碼成字節(jié)包,而字節(jié)包可以解碼成字符串(Ref)棕孙。
    字符串和字節(jié)包的關(guān)系
  • Python對bytes類型的數(shù)據(jù)用帶b前綴的單引號或雙引號表示。要注意區(qū)分'ABC'b'ABC'蟀俊,前者是str,后者雖然內(nèi)容顯示得和前者一樣肢预,但bytes的每個字符都只占用一個字節(jié)。
  • Unicode表示的str通過encode()方法可以編碼為指定的bytes;
    反過來烫映,如果我們從網(wǎng)絡或磁盤上讀取了字節(jié)流,那么讀到的數(shù)據(jù)就是bytes窑邦。要把bytes變?yōu)?code>str,就需要用decode()方法.
  • 在操作字符串時冈钦,我們經(jīng)常遇到strbytes的互相轉(zhuǎn)換。為了避免亂碼問題厉熟,應當始終堅持使用UTF-8編碼對strbytes進行轉(zhuǎn)換
  • 由于Python源代碼也是一個文本文件揍瑟,所以乍炉,當你的源代碼中包含中文的時候绢片,在保存源代碼時岛琼,就需要務必指定保存為UTF-8編碼。當Python解釋器讀取源代碼時槐瑞,為了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
  • 申明了UTF-8編碼并不意味著你的.py文件就是UTF-8編碼的困檩,必須并且要確保文本編輯器正在使用UTF-8 without BOM編碼

格式化的字符串

在Python中祠挫,采用的格式化方式和C語言是一致的,用%實現(xiàn)等舔。

占位符 替換內(nèi)容
%d 整數(shù)
%f 浮點數(shù)
%s 字符串
%x 十六進制整數(shù)

格式化整數(shù)和浮點數(shù)還可以指定是否補0和整數(shù)與小數(shù)的位數(shù)显沈,例如:

In [20]: print('%2d-%02d' % (3, 1))
 3-01

其中%2d表示兩位精度整數(shù)软瞎,%02d表示兩位整數(shù),并且用0補位涤浇。

  • 如果你不太確定應該用什么,%s永遠起作用著恩,它會把任何數(shù)據(jù)類型轉(zhuǎn)換為字符串:
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜻展,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子纵顾,更是在濱河造成了極大的恐慌,老刑警劉巖施逾,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異曹仗,居然都是意外死亡蠕搜,警方通過查閱死者的電腦和手機怎茫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門轨蛤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人俱萍,你說我怎么就攤上這事告丢。” “怎么了岖免?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵照捡,是天一觀的道長。 經(jīng)常有香客問我栗精,道長瞻鹏,這世上最難降的妖魔是什么鹿寨? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮脚草,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘馏慨。我一直安慰自己,他們只是感情好写隶,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布慕趴。 她就那樣靜靜地躺著误窖,像睡著了一般秩贰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上毒费,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天,我揣著相機與錄音想际,去河邊找鬼。 笑死胡本,一個胖子當著我的面吹牛畸悬,可吹牛的內(nèi)容都是我干的侧甫。 我是一名探鬼主播蹋宦,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼守屉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拇泛,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俺叭,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绪颖,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年窃款,在試婚紗的時候發(fā)現(xiàn)自己被綠了牍氛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡搬俊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出唉擂,到底是詐尸還是另有隱情,我是刑警寧澤玩祟,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布空扎,位于F島的核電站藏鹊,受9級特大地震影響转锈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜撮慨,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望甫煞。 院中可真熱鬧,春花似錦、人聲如沸弟胀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岔留。三九已至检柬,卻和暖如春献联,著一層夾襖步出監(jiān)牢的瞬間何址,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工原押, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诸衔。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓颇玷,卻偏偏與公主長得像笨农,于是被迫代替她去往敵國和親帖渠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361