字符编码
计算机只能处理数字,如果要处理文本,就必须把文本转换为数字才能处理。
最早8个比特(bit)等于1个字节(byte)。表示最大整数为255(11111111)。美国采用ASCII编码,最早只有127个字符被编码到计算机,而处理中文最少需要2个字节,所以中国制定了GB2312编码,各国有了各国的编码,因此在多语言文本中,就会产生乱码,所以Unicode编码产生,既可以对英文编码,也可以对中文编码。但是ASCII编码通常用一个字节,而Unicode编码要用2个字节。如果都用Unicode编码,那么新的问题就是存储和传输的空间就要变得更大,因为节约,就产生了UTF-8编码,UTF-8把字母和汉字分为常用和不常用,常用的英文编成1个字节,常用的汉字编为3个字节。
现在在计算机中,统一使用Unicode编码,当要保存或者传输的时候就采用UTF-8编码。
比如在记事本里面编辑的时候,我们使用的是Unicode编码,当变成txt文件格式时,用UTF-8编码
浏览网页的时候,服务器把生成的Unicode内容转换为UTF-8传到浏览器,也就是用代码编网页的时候,用的是Unicode,当网页显示出来,我们看到的时候,为UTF-8编码。
在Python中,字符串用Unicode编码
1.整数编码
ord()函数,获取字符的整数表示,例如ord('A'),得到65,ord(‘中’),得到20013
chr()函数,把编码转换为对应的字符,chr(66),得到‘B’,chr(25591),得到‘文‘
还可以用十六进制写,例如‘\u4e2d\u6587’,得到‘中文’
2.字符与字节的转换(str与bytes的转换)
***Python对bytes类型的数据用带b前缀的单引号或者双引号表示。
转换原因:在网络上传输,或者保存到磁盘上,就需要把字符str变为字节bytes。
一个字符对应若干字节。所以str类型占用多个字节
byte的每个字符都占用一个字节。转换为byte后,所占字节数变少
例如:x=b'ABC' 'ABC'和b‘ABC’,后者虽然内容显示和前者一样,但前者是字符str类型,一个字符占若干字节后者是bytes类型,每个字符占一个字节。
(1)encode()方法:把str可以编码为指定的bytes类型
我们对str类型的字符串‘ABC’进行ASCII编码,变为b'ABC',此时类型变为bytes类型
对含有汉字的str类型进行ASCII编码,产生错误,因为ASCII不能编码汉字,于是我们又用UTF-8编码将str类型的‘中文’转换为bytes类型b'\xe4\xb8\xad\xe6\x96\x87'
(2)decode()方法:将bytes类型指定编码为str类型
如果用bytes类型的汉字用ascii编码为str类型也是不可以的,如果bytes中包含无法解码的字节,也会报错
如果你忘记了一部分字节的utf-8的编码,而又不想程序出错,你可以在添加errors=‘ignore’,忽略错误的字节
3.len()方法:测出str类型的字符数或者bytes类型的字节数
一个中文字符被utf-8编码之后,占3个字节,1个英文字符只占1个字节。
在保存python源代码的时候,要指定格式为UTF-8编码,如果python解释器读取源代码的时候,也要按照utf-8编码读取,我们通常在python代码开头写上
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行是告诉Linux/os x系统,这是一个Python可执行程序,Windows会忽略这个注释
第二行是为了告诉Python解释器,要按照UTF-8编码读取源代码,否则会出现乱码。
要确保文本编辑器在使用UTF-8 without BOM编码
格式化字符串
-*-符号%就是用来格式化字符串的-*-
我们有时候会输出‘亲爱哒xxx你好,你的xx月的花费是xx,余额是xx’之类的字符串,其中xxx表示的内容都是根据输入的变量变化的。
在python中,输出字符串中变量的形式和C语言一样,用%实现。
如果格式化的字符串后面也就是%后面只跟一个参数,那么可以去掉括号。
%s表示用字符串替换,当你不清楚要输入什么类型时,%s永远起作用,它可以把任何数据类型转换为字符串。
上面是占位符和替换内容的对应
与C语言一样,当我们格式化字符串的时候,可以格式化整数和标点数,我们可以这样写%2d;%02d;%.2f,他们所代表的的内容依次是输出两位数的整数;输出两位数的整数,如果此时只有一位数,那么在首位补0;输出小数点后两位。
但是有时候我们需要在字符串里面输出%。就好像下面的情景
我们直接把%添加在里面,会报错,这个时候我们需要在%后面添加一个%,就好像我在python基础语法里面写的一样,我们需要转义,合法的输出我们需要输出的。
format():格式化字符串的方法
format()方法会用传入的参数一次替换字符串的占位符{0},{1},{2}......,这种方法比较麻烦,但是当数据多的时候,不容易出错。
当我们要在后面添加.1f时,需要在序号数字后面打上':',序号里面不需要特别说明变量的类型