桐花万里python路-基础篇-04-字符编码及字符串格式化

  • ASCII
    • American Standard Code for Information Interchange,美国标准信息交换代码,
    • 是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号
  • GB2312
    • 为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5
    • GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号
    • 1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的 GB18030是取代GBK1.0的正式国家标准
    • 现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312
    • 有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码
  • Unicode
    • 统一码、万国码、单一码
    • 为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536
    • UTF-8
      • 是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存
      • py2是默认的ASCII编码,所以默认的在头部声明编码格式为utf-8以支持中文等字符
        #!/usr/bin/env python
        # -*- coding: utf-8 -*-
          
        print "你好,世界"
      • unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间
      • 在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string
  • 字符串
    • 格式化输出
      • Python使用一个字符串作为模板。模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的格式。Python用一个tuple将多个值传递给模板,每个值对应一个格式符
        print("I'm %s. I'm %d year old" % ('Vamei', 99))
      • 格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型
        %s    字符串 (采用str()的显示)
        
        %r    字符串 (采用repr()的显示)
        
        %c    单个字符
        
        %b    二进制整数
        
        %d    十进制整数
        
        %i    十进制整数
        
        %o    八进制整数
        
        %x    十六进制整数
        
        %e    指数 (基底写为e)
        
        %E    指数 (基底写为E)
        
        %f    浮点数
        
        %F    浮点数,与上相同
        
        %g    指数(e)或浮点数 (根据显示长度)
        
        %G    指数(E)或浮点数 (根据显示长度)
        
        %%    字符"%"
      • 语法模板

        '''
        %[(name)][flags][width].[precision]typecode

        (name)为命名

        flags可以有+,-,' '或0。+表示右对齐。-表示左对齐。' '为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0表示使用0填充。

        width表示显示宽度

        precision表示小数点后精度
        '''
        print("%+10x" % 10)
        print("%04d" % 5)
        print("%6.3f" % 2.3)

        #Python实际上用4来替换*。所以实际的模板为"%.4f"
        print("%.*f" % (4, 1.2))

        #在八进制数前面显示零(0),在十六进制前面显示"0x"或者"0X"(取决于用的是"x"还是"X")
        num = 100
        print "%d to hex is %x" %(num, num)
        print "%d to hex is %X" %(num, num)
        print "%d to hex is %#x" %(num, num)
        print "%d to hex is %#X" %(num, num) 
      • 内建函数format()

        • Python2.6开始,新增了一种格式化字符串的函数str.format(),通过这个函数同样可以对字符串进行格式化处理。在format()函数中,使用“{}”符号来当作格式化操作符
          # 位置参数
          print "{0} is {1} years old".format("Wilber", 28)
          print "{} is {} years old".format("Wilber", 28)
          print "Hi, {0}! {0} is {1} years old".format("Wilber", 28)
          
          # 关键字参数
          print "{name} is {age} years old".format(name = "Wilber", age = 28)
          
          # 下标参数
          li = ["Wilber", 28]
          print "{0[0]} is {0[1]} years old".format(li)
          
          # 填充与对齐
          # ^、<、>分别是居中、左对齐、右对齐,后面带宽度
          # :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
          print '{:>8}'.format('3.14')
          print '{:<8}'.format('3.14')
          print '{:^8}'.format('3.14')
          print '{:0>8}'.format('3.14')
          print '{:a>8}'.format('3.14')
          
          # 浮点数精度
          print '{:.4f}'.format(3.1415926)
          print '{:0>10.4f}'.format(3.1415926)
          
          # 进制
          # b、d、o、x分别是二进制、十进制、八进制、十六进制
          print '{:b}'.format(11)
          print '{:d}'.format(11)
          print '{:o}'.format(11)
          print '{:x}'.format(11)
          print '{:#x}'.format(11)
          print '{:#X}'.format(11)
          
          # 千位分隔符
          print '{:,}'.format(15700000000)
原文地址:https://www.cnblogs.com/zhujingxiu/p/8183989.html