● 字符编码
在python 3中字符串是unicode编码,支持多语言。
print('包含中文的str')
对单个字母的编码,使用ord( )
函数获取字符的整数表示
char( )
函数把编码转换为对应的字符
print(ord('A')) # 65
print(ord('中')) # 20013
print(chr(66)) # B
print(chr(25991)) # 文
print('\u4e2d\u6587') #十六进制整数编码形式 中文
python中的字符串类型是str,在内存中是以unicode表示。一个字符对应多个字节 。
网络上传输或者保存在磁盘上,需要把str变为以字节为单位的bytes
python 对bytes类型的数据使用带b前缀的'' "", bytes 每个字符只占一个字节
x = b'ABC'
print(x)
以Unicode表示的str通过encode()方法,可以编码为指定的bytes
a = 'ABC'.encode('ascii')
print('a:',a)
b = '中文'.encode('utf-8')
print(b)
# 含有中文的str可以使用utf-8编码,但无法使用ascii编码 # 从网络或磁盘上读取字节流,读取到的数据是bytes。要把bytes变为str,使用decode() c = b'ABC'.decode('ascii') print(c) d = b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') print(d) # 如果bytes中包含无法解码的字节,decode()会报错 # 如果只有一小部分无效的字节,可以传入errors='ignore'忽略错误字节 e = b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore') print(e) # len() 计算str包含多少个字符/bytes字节数 print(len('ABC')) print(len('中午')) print(len(b'ABC')) print(len(b'\xe4\xb8\xad\xe6\x96\x87')) print(len('中文'.encode('utf-8'))) # 一个中文字符经过utf-8编码之后会占用3个字节,1个英文字符只占用1个字节 # 为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换。 # 由于Python源代码也是一个文本文件,当源代码中包含中文的时候,在保存源代码时务必指定保存为UTF-8编码。 # #!/usr/bin/env python3 # -*- coding: utf-8 -*- # # 第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释; # 第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。 #申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码 # 格式化 % # %s表示用字符串替换,%d表示用整数代替 %f浮点数 %x十六进制整数 # 有几个%?占位符,后面就按顺序跟几个变量或者值 print('Hello,%s' % 'world') print('Hi, %s, you have $%d.' % ('Michael', 10000)) # 格式化整数和浮点数还可以指定是否补0和整数与小数的位数: print('%d-%d' % (3, 1)) # 3-1 print('%d-%2d' % (3, 1)) # 3- 1 print('%2d-%02d' % (3, 1)) # 3-01 print('%02d-%02d' % (3, 1)) # 03-01 print('%.3f' % 3.1415926) #小数点后三位 # 当不太确定用什么数据类型,%s永远起作用,它会把任何数据类型转换为字符串 print('Age: %s; Gender: %s' % (25, True)) # %%转义一个% print('growth rate: %d%%' % 7) # format()它会用传入的参数依次替换字符串内的占位符{0}、{1}…… 比较麻烦就是了 print('Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)) print('Hello, %s, 成绩提升了 %.1f%%' % ('小明', 17.125)) # 练习:小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点,并用字符串格式化显示出'xx.x%',只保留小数点后1位: s1 = 72 s2 = 85 r = (85-72)/85 print('%.1f%%' % r)