• 中文
    • English
  • 注册
  • 查看作者
  • 透过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
  • 0
  • 1.7k
  • 请登录之后再进行评论

    登录
    单栏布局 侧栏位置: