python字符串


一、字符编码问题

  1. 在python3中,字符串是以Unicode编码的,也就是说python的字符串支持多语言。对于单个字符的编码,python提供了_ord()_ 函数来获取字符的整数表示,chr() 函数则是把编码转换为对应的字符,比如:

>>>ord('A')
65
>>>ord('中')
20013

>>>chr(66)
'B'
>>>chr(25991)
'文'
  1. 由于python的字符串类型是str,在内存中是以Unicode来表示的,一个字符对应于若干个字节。如果要在网络上传输或者保存到磁盘上,则需要将str变为以字节为单位的bytes,bytes的每个字符都只占用一个字节 python对bytes类型的数据用带b前缀的单引号或双引号表示:

x=b'abc'

  1. 编码与解码方法:以Unicode表示的str可以通过encode()方法来编码为制定的bytes,比如:
>>>'abc'.encode('ascii')
b'abc'
>>>'中文'.encode('utf-8')
b'xe4xb8xadxe6x96x87' # 十六进制表示
>>>'中文'.encode('ascii')
error:UnicodeEncodeError: 'ascii' codec 
can't encode characters in position 0-1: ordinal not in range(128)

 注意: 纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str则可以用UTF-8编码为bytes,而含有中文的str是无法用ASCII编码的,因为中文编码的范围超过了ASCII编码的范围,python会报错。
  如果我们从网络或磁盘上读取了字节流也就是bytes格式的数据,则需要使用decode()方法来进行解码:

>>>b'abc'.decode('ascii')
'abc'
>>>b'xe4xb8xadxe6x96x87'.decode('utf-8')
'中文'

 4. 获取str字符数或字节数方法:通过len()函数我们可以来计算出str的字符数或者bytes的字节数:

>>>len('abc')
3
>>>len('中文')
2

>>>len(b'abc')                    # 一个英文字符经过utf-8编码后只占一个字节
3
>>>len(b'xe4xb8xadx96x87')
6
>>>len('中文'.encode('utf-8'))    # 一个中文字符经过Utf-8编码后通常会占用3个字节
6

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

二、格式化问题

  在python中,采用的格式化方式和C语言是一致的,用%来实现,其常见的占位符有:

整数 浮点数 字符串 十六进制整数
%d %f %s %x

  其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数:

>>>'%2d和%02d' % (3,1)
' 3和01'
>>>'%.2f' % 3.1415926
'3.14'

  如果不确定应该用什么格式的时候记住%s永远起作用,它会把任何数据类型转换为字符串:

>>>'Age: %s. Gender:%s' % (25,True)
'Age:25.Gender:True'

  有时候,字符串里面的%是一个普通字符,这个时候就需要转义了,用%%来表示一个%:

>>>'growth rate: %d %%' % 7
'growth rate:7 %'
原文地址:https://www.cnblogs.com/xipuhu/p/7456588.html