参考:廖雪峰官网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\"