• 注册
  • 赞助本站

    • 微信
    • 支付宝
    • Q Q

    感谢一直支持本站的所有人!

    • 查看作者
    • 透过Python看字符串和编码

      一.  前言

      再一次学起了Python,看的依旧是廖雪峰老师的Python教程,依旧是看到字符编码这里,一头雾水,于是根据廖雪峰老师的字符串和编码一文,整理出这样的一个笔记,希望以后复习的时候能轻松一些~

      二.  编码的演变

      • ASCII编码只能表示127个字符被,也就是大小写英文字母、数字和一些符号,于是为了表示中文和其他各种国家的文字,Unicode应运而生。

      • 为了节约空间,又将Unicode编码转化为“可变长编码”:UTF-8编码应运而生

      三.  编码的联系和区别

      • 而ASCII编码实际上可以被看成是UTF-8编码的一部分

      • 在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码

      • ASCII编码是1个字节,而Unicode编码通常是2个字节。UTF-8则将常用的英文字母被编码成1个字节,汉字通常是3个字节。

      四.  Python字符串

      操作字符串的几个常用Python函数:

      print(ord('A'))       # ord()函数获取字符的整数表示,
      print(chr(30002))     #  chr()函数把编码转换为对应的字符
      print('\u4e2d\u6587') # 根据字符的整数编码,输出字符
      输出 :
      
      65
      甲
      中文

      最新的Python 3版本中,字符串在内存中以Unicode表示,通过encode()方法可以编码为指定的bytes

      print('ABC'.encode('ascii'))
      # 输出b'ABC' 
      # Python对bytes类型的数据用带b前缀的单引号或双引号表示
      # 要注意区分'ABC'和b'ABC',前者是str,后者虽然内容显示得和前者一样
      # 但bytes的每个字符都只占用一个字节
      print('ABC'.encode('utf-8'))
      # 输出b'ABC'
      print('甲'.encode('utf-8'))
      # 输出b'\xe7\x94\xb2'

      反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:

      print( b'ABC'.decode('ascii'))
      # 输出:ABC
      print(b'\xe7\x94\xb2'.decode('utf-8'))
      # 输出:甲

      len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数:

      print(len('AB  C'))
      # 输出:5
      print(len(b'AB  C'))  
      # 输出:5  
      print(len('甲'))
      # 输出:1
      print(len('甲'.encode('utf-8')))
      # 输出:3
      
      #1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符依旧只占用1个字节

      在操作字符串时,我们经常遇到str和bytes的互相转换。为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换。

      由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

      #!/usr/bin/env python3
      # -*- coding: utf-8 -*-

      五.  格式化字符串

      在Python中,采用的格式化方式和C语言是一致的,用%实现,常用方法如下:

      print('%5d|%02d' % (3, 1)) # 如果只有一个变量或者值,括号可以省略
      # 输出 :[][][][]3|01    []代表空格
      print('%-5d|%2d' % (3, 1))
      # 输出 :3[][][][]|[]1
      print('%.2f' % 3.1415926)
      # 输出:3.14
      print('%s,%s,%s,%s' % (1,1.1,True,"String"))
      # 输出 :1,1.1,True,String
      print('%d%%' % 5)
      # 输出:5%

      还可以用format()方法,不过比较麻烦:

      print("{0} {1}".format("hello", "world") )
      # 输出:hello world
      print('Hello, {0}, 成绩提升了 {1}%'.format('小明', 17.125))
      # 输出:Hello, 小明, 成绩提升了 17.125%
      print('Hello, {0}, 成绩提升了 {1:.2f}%'.format('小明', 17.125))
      # 输出:Hello, 小明, 成绩提升了 17.12%

      更加详细的语法请看菜鸟教程,这里不再赘述

    • 0
    • 0
    • 209
    • 单栏布局 侧栏位置: