zoukankan      html  css  js  c++  java
  • Python中的字符串和编码

    1.ASCII、Unicode和UTF-8的关系:

    字符 ASCII Unicode

    UTF-8

    A 01000001 00000000 01000001 01000001
    x 01001110 00101101

    11100100 10111000 10101101

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

    用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:

    浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器:

    2.字符串

    对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:

     

    如果知道字符的整数编码,还可以用十六进制这么写str

     


    由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes

    Python对bytes类型的数据用带b前缀的单引号或双引号表示:

     

    以Unicode表示的str通过encode()方法可以编码为指定的bytes,例如:(str—>encode()—>byte)

     

    纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。


    在bytes中,无法显示为ASCII字符的字节,用x##显示。

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

     

    如果bytes中包含无法解码的字节,decode()方法会报错:

     

    如果bytes中只有一小部分无效的字节,可以传入errors='ignore'忽略错误的字节:

     


    要计算str包含多少个字符,可以用len()函数:

     

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

     


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

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

    格式化

    如何输出格式化的字符串。我们经常会输出类似'亲爱的xxx你好!你xx月的话费是xx,余额是xx'之类的字符串,而xxx的内容都是根据变量变化的,所以,需要一种简便的格式化字符串的方式。

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

    >>> 'Hello, %s' % 'world'
    'Hello, world'
    >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
    'Hi, Michael, you have $1000000.'

    %运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。

    常见的占位符有:

    占位符替换内容
    %d 整数
    %f 浮点数
    %s 字符串
    %x 十六进制整数

    format ()方法

    另一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次替换字符串内的占位符{0}{1}……,不过这种方式写起来比%要麻烦得多:

     

  • 相关阅读:
    HDU 6071
    HDU 6073
    HDU 2124 Repair the Wall(贪心)
    HDU 2037 今年暑假不AC(贪心)
    HDU 1257 最少拦截系统(贪心)
    HDU 1789 Doing Homework again(贪心)
    HDU 1009 FatMouse' Trade(贪心)
    HDU 2216 Game III(BFS)
    HDU 1509 Windows Message Queue(队列)
    HDU 1081 To The Max(动态规划)
  • 原文地址:https://www.cnblogs.com/qq597585136/p/10533538.html
Copyright © 2011-2022 走看看