參考:廖雪峯官網https://www.liaoxuefeng.com/wiki/1016959663602400/1017075323632896app
1、ASCII、Unicode、UTF-8的由來和關係學習
一、由來:由於計算機只識別數字,因此計算機的發明國家美國對大小寫英文字母、數字以及一些特殊符號進行了編碼,共127個,即ASCII編碼表。優化
二、發展:由於ASCII編碼不支持中文,因此中國製定了GB1312編碼,韓國製定了Euc-kr、日本製定了Shift-JIS...編碼
三、整合:世界上有上百種語言,使用各自的編碼最終的結果就是亂碼。所以Unicode編碼出現了,Unicode支持全部的語言。也是計算機使用的編碼。spa
四、優化:Unicode雖然支持全部的語言,解決了亂碼問題,可是也有不足。不管是英文、中文字符,在Unicode編碼下所佔的存儲空間都是2個字節(1個字節=8個比特,也就是十進制的255,二進制的11111111),而實際上,英文字符僅須要1個字節的存儲空間,Unicode採起的方式是在二進制前填充0。例如:3d
字符"A"在ASCII編碼中是65,二進制表示是1000001,而使用Unicode則表示爲:00000000 01000001。這樣,至關於佔用了2個字節的存儲空間。因此,utf-8出現了。utf-8把字符按不一樣的大小編碼成1-6個字節,英文通常是1個,中文是3個字節,個別生闢字佔用4-6個。code
五、注意:計算機內存中統一使用Unicode,當須要保存到硬盤或者輸出時,則轉化爲UTF-8。orm
2、學習blog
一、Unicode的ord()和chr()方法,#號後爲輸出。遞歸
ord("A") #65 ord("1") #49 ord("a") #97 ord("中")#20013 chr(65) #A chr(20013) #中
二、字符轉二進制
name = "中文" for i in name: j = bytes(i,encoding = "utf-8") #將字符轉換爲字節 print("字符\"%s\"用二進制輸出爲:"%i) for m in j: n = bin(m) #字節轉爲二進制 print(n,end = " ") #以空格結尾 print()
三、十進制轉二進制
l = [] num =19 def a(num): if num < 0 : return "-"+a(abs(num)) #若是數字小於0,則在二進制數前添加負號返回,abs()返回絕對值 while True: num,r = divmod(num,2) #返回結果:num/2,num%2 = divmod(num,2),以19爲例,依次返回結果(9,1)(4,1)(2,0)(1,0)(0,1),則r的值依次爲11001,num=0時,循環結束。 l.append(str(r)) #l列表依次追加11001,l = ["1","1","0","0","1"] print(l) if num == 0: return "".join(l[::-1]) #l[::-1]是使用切片,::1將列表分紅1等份,::2將列表分紅2等份(奇數向上取整,例如5取3),加上負號就是倒置。::-1實際就是將列表倒置了。
#Python join() 方法用於將序列中的元素以指定的字符鏈接生成一個新的字符串。也就是把倒置後的列表["1","0","0","1","1"]的5個字符生成爲"10011"並返回。
四、對數字進行36進制內的轉換
#網上copy的案例,分析下
def baseN(num, b): return ((num == 0) and "0") or \ # (1)當num==0和"0",則直接返回0%b;(2)遞歸出口
(baseN(num // b, b).lstrip("0") +\ #num != 0,則傳入(num//b,b)繼續調用baseN(),lstrip("0"),是去掉字符串內首個字符串的0字符。例如"00aa0 0xxa"使用方法後爲"aa0 0xxa"
"0123456789abcdefghijklmnopqrstuvwxyz"[num % b]) #每次調用拼接取餘值[num%b],"0123456789abcdefghijklmnopqrstuvwxyz"指定了[num%b]的取值範圍,在本案例中
#其實能夠寫爲"01"[num%b],由於計算機轉化爲進制後只有0和1。
baseN(2,16)
五、佔位符%和format()的使用
#佔位符,等同於format() print("%2d-%03d"%(3,10)) # 3-010 #3前面有空格,由於未指定補充值 print("%3d-%03d"%(3,10)) # 3-010 # %3d,在值前面生成2個空格 # %03d,在個十位數前面填充0,顯示爲3位數 print("%d-%d"%(3,1)) #3-1 print("%.1f"%3) #.1f就是保留小數點後1位,同理.2f就是保留兩位 #3.0 print("%d%%"%7) # %d是保留整數,%%顯示爲% #7%
六、轉義符\和r
#轉義符\,在單引號或者雙引號內須要使用引號時,在引號前添加轉義符\ print('I\'m \"zhangchun1\"') # I'm "zhangchun1" print("I\'m \"zhangchun\"") # I'm "zhangchun" # \n與\t 表明換行和製表符, print("I\'m \n\"zhangchun\"") print("I\'m \t\"zhangchun\"") # I'm # "zhangchun" # I'm "zhangchun" #轉義r,使用r時,則""內部默認不轉義 print(r"I\'m \t\"zhangchun\"") # I\'m \t\"zhangchun\"