




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
python-字符串和編碼2任務(wù)描述華云數(shù)據(jù)集團基于CloudUltra?私有云為兵工物資集團構(gòu)建私有云平臺,在保障平臺的高可靠性、高可用性、高安全性的基礎(chǔ)之上,為兵工物資集團提供持續(xù)性、可擴展性、可管理性的服務(wù)。和傳統(tǒng)模式相比基礎(chǔ)設(shè)施使用率提高了75%以上,數(shù)據(jù)可靠性提高到了99.9%,保證兵工物資集團數(shù)據(jù)安全可控,滿足集團業(yè)務(wù)需求。本節(jié)主要講解兵工物資集團構(gòu)建私有云平臺項目的實施過程中,對python-字符串和編碼的介紹。目錄字符編碼格式化Python的字符串34字符編碼我們已經(jīng)講過了,字符串也是一種數(shù)據(jù)類型,但是,字符串比較特殊的是還有一個編碼問題。因為計算機只能處理數(shù)字,如果要處理文本,就必須先把文本轉(zhuǎn)換為數(shù)字才能處理。最早的計算機在設(shè)計時采用8個比特(bit)作為一個字節(jié)(byte),所以,一個字節(jié)能表示的最大的整數(shù)就是255(二進制11111111=十進制255),如果要表示更大的整數(shù),就必須用更多的字節(jié)。比如兩個字節(jié)可以表示的最大整數(shù)是65535,4個字節(jié)可以表示的最大整數(shù)是4294967295。由于計算機是美國人發(fā)明的,因此,最早只有127個字母被編碼到計算機里,也就是大小寫英文字母、數(shù)字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母z的編碼是122。但是要處理中文顯然一個字節(jié)是不夠的,至少需要兩個字節(jié),而且還不能和ASCII編碼沖突,所以,中國制定了GB2312編碼,用來把中文編進去。你可以想得到的是,全世界有上百種語言,日本把日文編到Shift_JIS里,韓國把韓文編到Euc-kr里,各國有各國的標(biāo)準(zhǔn),就會不可避免地出現(xiàn)沖突,結(jié)果就是,在多語言混合的文本中,顯示出來會有亂碼。5字符編碼因此,Unicode應(yīng)運而生。Unicode把所有語言都統(tǒng)一到一套編碼里,這樣就不會再有亂碼問題了。Unicode標(biāo)準(zhǔn)也在不斷發(fā)展,但最常用的是用兩個字節(jié)表示一個字符(如果要用到非常偏僻的字符,就需要4個字節(jié))。現(xiàn)代操作系統(tǒng)和大多數(shù)編程語言都直接支持Unicode?,F(xiàn)在,捋一捋ASCII編碼和Unicode編碼的區(qū)別:ASCII編碼是1個字節(jié),而Unicode編碼通常是2個字節(jié)。字母A用ASCII編碼是十進制的65,二進制的01000001;字符0用ASCII編碼是十進制的48,二進制的00110000,注意字符'0'和整數(shù)0是不同的;漢字中已經(jīng)超出了ASCII編碼的范圍,用Unicode編碼是十進制的20013,二進制的0100111000101101。你可以猜測,如果把ASCII編碼的A用Unicode編碼,只需要在前面補0就可以,因此,A的Unicode編碼是0000000001000001。6字符編碼新的問題又出現(xiàn)了:如果統(tǒng)一成Unicode編碼,亂碼問題從此消失了。但是,如果你寫的文本基本上全部是英文的話,用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é)。如果你要傳輸?shù)奈谋景罅坑⑽淖址?,用UTF-8編碼就能節(jié)省空間:字符ASCIIUnicodeUTF-8A01000001000000000100000101000001中x01001110001011011110010010111000101011017字符編碼從上面的表格還可以發(fā)現(xiàn),UTF-8編碼有一個額外的好處,就是ASCII編碼實際上可以被看成是UTF-8編碼的一部分,所以,大量只支持ASCII編碼的歷史遺留軟件可以在UTF-8編碼下繼續(xù)工作。搞清楚了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保存到文件:8瀏覽網(wǎng)頁的時候,服務(wù)器會把動態(tài)生成的Unicode內(nèi)容轉(zhuǎn)換為UTF-8再傳輸?shù)綖g覽器:所以你看到很多網(wǎng)頁的源碼上會有類似<metacharset="UTF-8"/>的信息,表示該網(wǎng)頁正是用的UTF-8編碼。字符編碼9搞清楚了令人頭疼的字符編碼問題后,我們再來研究Python對Unicode的支持。因為Python的誕生比Unicode標(biāo)準(zhǔn)發(fā)布的時間還要早,所以最早的Python只支持ASCII編碼,普通的字符串'ABC'在Python內(nèi)部都是ASCII編碼的。Python提供了ord()和chr()函數(shù),可以把字母和對應(yīng)的數(shù)字相互轉(zhuǎn)換:>>>ord('A')65>>>chr(65)'A'Python的字符串10Python在后來添加了對Unicode的支持,以Unicode表示的字符串用u'...'表示,比如:>>>printu'中文'中文>>>u'中'u'\u4e2d'寫u'中'和u'\u4e2d'是一樣的,\u后面是十六進制的Unicode碼。因此,u'A'和u'\u0041'也是一樣的。Python的字符串11Python的字符串兩種字符串如何相互轉(zhuǎn)換?字符串'xxx'雖然是ASCII編碼,但也可以看成是UTF-8編碼,而u'xxx'則只能是Unicode編碼。把u'xxx'轉(zhuǎn)換為UTF-8編碼的'xxx'用encode('utf-8')方法:>>>u'ABC'.encode('utf-8')'ABC'>>>u'中文'.encode('utf-8')'\xe4\xb8\xad\xe6\x96\x87'12Python的字符串英文字符轉(zhuǎn)換后表示的UTF-8的值和Unicode值相等(但占用的存儲空間不同),而中文字符轉(zhuǎn)換后1個Unicode字符將變?yōu)?個UTF-8字符,你看到的\xe4就是其中一個字節(jié),因為它的值是228,沒有對應(yīng)的字母可以顯示,所以以十六進制顯示字節(jié)的數(shù)值。len()函數(shù)可以返回字符串的長度:>>>len(u'ABC')3>>>len('ABC')3>>>len(u'中文')2>>>len('\xe4\xb8\xad\xe6\x96\x87')613Python的字符串反過來,把UTF-8編碼表示的字符串'xxx'轉(zhuǎn)換為Unicode字符串u'xxx'用decode('utf-8')方法:>>>'abc'.decode('utf-8')u'abc'>>>'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')u'\u4e2d\u6587'>>>print'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')中文14Python的字符串由于Python源代碼也是一個文本文件,所以,當(dāng)你的源代碼中包含中文的時候,在保存源代碼時,就需要務(wù)必指定保存為UTF-8編碼。當(dāng)Python解釋器讀取源代碼時,為了讓它按UTF-8編碼讀取,我們通常在文件開頭寫上這兩行:#!/usr/bin/envpython#-*-coding:utf-8-*-15Python的字符串第一行注釋是為了告訴Linux/OSX系統(tǒng),這是一個Python可執(zhí)行程序,Windows系統(tǒng)會忽略這個注釋;第二行注釋是為了告訴Python解釋器,按照UTF-8編碼讀取源代碼,否則,你在源代碼中寫的中文輸出可能會有亂碼。如果你使用Notepad++進行編輯,除了要加上#-*-coding:utf-8-*-外,中文字符串必須是Unicode字符串:16Python的字符串申明了UTF-8編碼并不意味著你的.py文件就是UTF-8編碼的,必須并且要確保Notepad++正在使用UTF-8withoutBOM編碼:17Python的字符串如果.py文件本身使用UTF-8編碼,并且也申明了#-*-coding:utf-8-*-,打開命令提示符測試就可以正常顯示中文:18格式化最后一個常見的問題是如何輸出格式化的字符串。我們經(jīng)常會輸出類似'親愛的xxx你好!你xx月的話費是xx,余額是xx'之類的字符串,而xxx的內(nèi)容都是根據(jù)變量變化的,所以,需要一種簡便的格式化字符串的方式。19格式化在Python中,采用的格式化方式和C語言是一致的,用%實現(xiàn),舉例如下:>>>'Hello,%s'%'world''Hello,world'>>>'Hi,%s,youhave$%d.'%('Michael',1000000)'Hi,Michael,youhave$1000000.'20格式化你可能猜到了,%運算符就是用來格式化字符串的。在字符串內(nèi)部,%s表示用字符串替換,%d表示用整數(shù)替換,有幾個%?占位符,后面就跟幾個變量或者值,順序要對應(yīng)好。如果只有一個%?,括號可以省略。常見的占位符有:%d整數(shù)%f浮點數(shù)%s字符串%x十六進制整數(shù)21格式化其中,格式化整數(shù)和浮點數(shù)還可以指定是否補0和整數(shù)與小數(shù)的位數(shù):>>>'%2d-%02d'%(3,1)'3-01'>>>'%.2f'%3.1415926'3.14'22格式化如果你不太確定應(yīng)該用什么,%s永遠起作用,它會把任何數(shù)據(jù)類型轉(zhuǎn)換為字符串:>>>'Age:%s.Gender:%s'%(25,True)'Age:25.Gender:True'對于Unicode字符串,用法完全一樣,但最好確保替換的字符串也是Unicode字符串:>>>u'Hi,%s'%u'Michael'u'Hi,Michael'有些時候,字符串里面的%是一個普通字符怎么辦?這個時候就需要轉(zhuǎn)義,用%%來表示一個%:>>>'growthrate:%d%%'%7'growthrate:7%'23小結(jié)由于歷史遺留問題,Python2.x版本雖然支持Unicode,但在語法上需要'xxx'和u'xxx'兩種字符串表示方式。Python當(dāng)然也支持其他編碼方式,比如把Unicode編碼成GB2312:>>>u'中文'.encode('gb2312')'\xd6\xd0\xce\xc4'但這種方式純屬自找麻煩,如果沒有特殊業(yè)務(wù)要求,請牢記僅使用Unicode和UTF-8這兩種編碼方式。在Python3.x版本中,把'xxx'和u'xxx
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公寓裝修施工合同
- 五人合資經(jīng)營合同樣本
- 股權(quán)轉(zhuǎn)讓及承銷合同
- 2024年泰山版小學(xué)信息技術(shù)二年級上冊《6 綜合實踐》教學(xué)設(shè)計
- 商業(yè)合同審核標(biāo)準(zhǔn)大全
- 中學(xué)2024年教育教學(xué)專項發(fā)展規(guī)劃執(zhí)行、完成情況
- 品牌推廣合同(三)
- 合同范文:專業(yè)虛擬主機托管
- Unit 1 Making friends Part A Let's talk(教學(xué)設(shè)計)-2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
- 按月退費合同范本
- 2024-2025學(xué)年山東省濰坊市高三上學(xué)期1月期末英語試題
- 2025-2030年中國青海省旅游行業(yè)市場現(xiàn)狀調(diào)查及發(fā)展趨向研判報告
- 人力資源部門2023年度招聘效果分析
- 八年級數(shù)學(xué)下冊 第1章 單元綜合測試卷(北師版 2025年春)
- 2025年春新外研版(三起)英語三年級下冊課件 Unit1第1課時Startup
- 2025年安徽碳鑫科技有限公司招聘筆試參考題庫含答案解析
- 2025廣東珠海高新區(qū)科技產(chǎn)業(yè)局招聘專員1人歷年高頻重點提升(共500題)附帶答案詳解
- 數(shù)學(xué)-福建省泉州市2024-2025學(xué)年高三上學(xué)期質(zhì)量監(jiān)測(二)試卷和答案(泉州二模)
- 員工行為守則及職業(yè)道德規(guī)范
- 3學(xué)會反思 第一課時 (說課稿) -2023-2024學(xué)年道德與法治六年級下冊統(tǒng)編版
- 2024年國土個人工作總結(jié)樣本(3篇)
評論
0/150
提交評論