ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

廖雪峰Python教程知识点整理归纳(2):字符串与编码

2021-08-25 21:01:00  阅读:230  来源: 互联网

标签:知识点 教程 字节 字符 Python bytes 编码 Unicode ASCII


转载请注明地址: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字符串。略。

 

标签:知识点,教程,字节,字符,Python,bytes,编码,Unicode,ASCII
来源: https://www.cnblogs.com/cynthius-phi/p/15186921.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有