• 桐花万里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)
  • 相关阅读:
    word(2)--如何解决word中首行失效的问题?
    Google AK47 的设计者 阿米特 辛格(Amit Singhal)博士如何评价机器学习?
    技术人如何克服拖延症?
    解决WebService 中泛型接口不能序列化问题
    如何减少每次同步数据量
    C#开源系统大汇总
    log4.net
    C#自定义控件背景色透明的方法
    [p2p]UDP用打洞技术穿透NAT的原理与实现
    商品管理方案V2.0
  • 原文地址:https://www.cnblogs.com/zhujingxiu/p/8183989.html
Copyright © 2020-2023  润新知