转载请注明地址:https://www.cnblogs.com/cynthius-phi/p/15186921.html
本文整理自:https://www.liaoxuefeng.com/wiki/1016959663602400/1017075323632896
字符编码
首先,有几种字符集:ASCII、Unicode、UTF-8。同样的一个字符,在其所能够出现的所有字符集中,都具有一个编码。
ASCII字符集是最小的,对应的大致是英文需要使用的各种字符(大致就是你键盘上能看见的那些字符),以及\n、\b、\a这样的一些基本的在计算机中起特殊作用的字符。ASCII字符的编码,以及存储在内存中时,空间占用为1字节。
Unicode字符集就还包含了其他各种语言所需使用的字符,当然也包括中文(以及日、韩等)所需使用的汉字。空间占用:一般2字节,很生僻的要4字节。所有的ASCII字符都是Unicode字符,它们的ASCII和Unicode编码也是相同的。但也存在许多非ASCII的Unicode字符。(为方便,下文中,前者一律称为“ASCII字符”,后者则称“Unicode字符”。)
UTF-8字符集中的字符与Unicode字符相同,但编码方式不一样。UTF-8字符集中字符所占内存空间不固定,ASCII字符只占1字节(与ASCII编码时情况相同),而汉字(Unicode字符)一般占3字节。设计的初衷是,如果一篇文章中大多数字符都是ASCII字符(但也有少数Unicode字符),按UTF-8存储就可以省空间,并且不会“坏掉”Unicode字符了。
Python的字符串
Python 3中,字符串以Unicode编码。
字符的基础知识
ord()和chr()
ord()用来获得字符的Unicode编码,chr()用来获得相应Unicode编码的字符。
\u
可以用\u####(#表数字)来指定字符,其中####为该字符的16进制Unicode编码。注意一定要4个数字。
str与bytes
bytes也是一种Python数据类型,用于存储一系列的字节。
表示
用b' '表示一个bytes类型的数据,如:b'ABC'。这与字符串的表示类似。
str转bytes:方法encode()
str有方法encode(),可以把自己转换(编码)为bytes。encode()还要求提供一个参数:编码方式,即使用哪套编码。常见的有两种:'ascii'和'utf-8'。
可能遇见的错误:将Unicode字符编码为ASCII。这样是会报错的(UnicodeEncodeError)。
bytes转str:方法decode()
bytes也有方法decode(),将自己转换(解码)为str。decode()同样也要求提供一个参数,与encode()同理。
可能遇见的错误:bytes中包含无法解码的字节。这样是会报错的(UnicodeDecodeError)。(但此时可以再传入一个参数errors='ignore'来忽略错误的字节。)
len()
对于str,函数len()计算其字符数;对于bytes,函数len()计算其字节数。
最后
如果要多次进行str/bytes间的转化,为避免乱码,应坚持使用UTF-8。
许多Python代码——在含有Unicode字符时——都会在开始出加入下面的2行注释:
#!/usr/bin/env python3 # -*- coding: utf-8 -*-
这是为了防止Unicode字符被错误处理(第一行给Linux / OS X的,我就不说了;第二行告诉Python按UTF-8处理源代码)。不过注意,光是这样还是不够的,还需要在文本编辑器中指定使用UTF-8。
格式化
Python有3种方法对字符串进行格式化:%、format()和f字符串。略。