python字符串

本文介绍了Python中字符编码的基本概念,包括Unicode编码的应用、str与bytes类型的转换方法及注意事项。此外,还详细讲解了如何使用%进行字符串格式化,包括不同类型数据的格式化方式。

一、字符编码问题

  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'\xe4\xb8\xad\xe6\x96\x87' # 十六进制表示
>>>'中文'.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'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'

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

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

>>>len(b'abc')                    # 一个英文字符经过utf-8编码后只占一个字节
3
>>>len(b'\xe4\xb8\xad\x96\x87')
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值