【10.24】Python语法练习4/17

今日任务:字符串与编码

一、字符串
字符串是一种数据类型,但是字符串存在编码问题,因为计算机处理文本必须把文本转化为数字才能处理。
最早只有127个字符被编码到计算机,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码。

中国制定了GB2312把中文编进去

Unicode编码把所有语言都统一到一套编码里。

ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节。为了解决Unicode编码在英文中存在的浪费问题,出现了把Unicode编码转化为“可变长编码”的UTF-8编码,UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字符被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节,如果要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:


中英文字符串的三种编码

从上面表格中可以发现,UTF-8编码有个好处是,ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

总结一下现在计算机系统通用的字符编码工作方式:
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或需要传输的时候,转换为UTF-8编码。
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:


编辑文件时Unicode编码与UTF-8编码转换

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


浏览网页时编码转换

二、Python的字符串
最新的Python 3 版本中,字符串是以Unicode编码的,意味着Python字符串支持多语言,对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符。
由于python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干字节。如果在网络传输或保存到磁盘上,需要把srt变为以字节为单位的bytes。
以Unicode表示的str通过encode()方法可以编码为制定的bytes,需要把bytes变为str,需要用decode()方法。
计算str包含多少个字符,可以用len()函数。
在操作字符串时,为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换。
由于python源代码也是一个文本文件,所以,当源代码中包含中文的时候,在保存源代码时,务必指定保存为UTF-8编码。当python解释器读取源代码时,为了让它按照UTF-8编码读取,我们通常在文件开头写上这两行:

!/usr/bin/env python3

-- coding: utf-8 --

第一行注释是为了告诉Linux/OS X系统,这是一个python可执行程序,windows系统灰灰列这个注释;
第二行注释是为了告诉python解释器,按照UTF-8编码读取源代码,否则,源代码中写的中文输出可能会有乱码。
同时,必须确保文本编辑器正是用UTF-8 without BOM编码,才能确保.py文件是UTF-8编码的。

三、格式化
如何输出格式化的字符串,经常会输出类似‘亲爱的XXX你好!你XX月的花费是XX,余额是XX’之类的字符串,XXX内容都是根据变量变化的,所以需要一种简便的格式化字符串的方式。

python中,采用的格式化方式和C语言是一致的,用%运算符格式化字符串,%s表示用字符串替换,%d表示用证书替换,有几个%?占位符,后面就跟几个变量或值,顺序要对应好,如果只有一个%?,括号可以省略。
常见的占位符有:


常见占位符

%s会把任何数据类型转化为字符串,如果字符串里%是一个普通字符,需要用%%来转义%。

你可能感兴趣的:(【10.24】Python语法练习4/17)