Python从入门到高手6.1节-字符串的定义与编码

news2024/12/27 15:30:14

目录

6.1.1 理解字符串

6.1.2 字符串的类型名

6.1.3 字符的数字编码

5.1.4 常用的字符编码

6.1.5 字符串的默认编码

6.1.6 字符串的编码与解码

6.1.7 转义字符详解

6.1.8 对字符串进行迭代

6.1.9 大神薯条老师


6.1.1 理解字符串

在Python中使用英文引号括住的都是字符串:

# 英文中的引号为单引号,双引号,三引号
chinese = "我爱你"
english = 'I Love You'
japanese = '''君のことを愛している'''
russian = """я люблю тебя"""

理解字符串,不仅要知道它是什么,还得知道它底层的数据结构。字符串是一种线性的顺序表结构:

1588232620(1).jpg

上图所示表示字符串"我一直深爱着你",从图中可以看出,字符是按序进行排列的,所有的字符空间对应着一块连续的内存,这种结构就叫做线性的顺序表结构。

图中的每一个格子表示一个内存块,内存块里存储了字符的数字编码。

对于字符串这种序列结构,可通过索引来访问容器中的每一个元素。在Python中,索引从0开始编号,0表示第一个,1表示第二个, 以此类推。例如编号0对应的是字符'我',编号1对应的是字符'一'。

感兴趣的同学可以系统地学习数据结构这门课程。成为一名卓越的程序员,必须掌握数据结构这门知识。薯条老师在后面的教程中会推出数据结构的系列课。

6.1.2 字符串的类型名

在交互模式中调用type来输出字符串对象的类型名:

>>> chinese = "我爱你"

>>> english = 'I Love You'

>>> japanese = '''君のことを愛している'''

>>> russian = """я люблю тебя"""

>>> type(chinese) <class 'str'>

>>> type(english) <class 'str'>

>>> type(japanese) <class 'str'>

>>> type(russian) <class 'str'>

从输出可知,字符串的类型名为str。

6.1.3 字符的数字编码

计算机只能处理二进制,为了让计算机能对字符进行处理,需要对字符进行编码。所谓的编码,是指用数字来对字符进行表示。不同的表示方法,即对应不同的字符编码。通过Python中的内置函数ord,可以获取字符的十进制数字码:

ord(character)

参数character表示特定的字符,返回值为字符的十进制数字编码。进入交互模式中进行验证:

>>> ord('爱') 
29233

通过Python中的内置函数chr,可以获取数字编码所对应的字符:

chr(code)

参数code表示字符的数字编码,返回值为数字编码所对的字符。 进入交互模式中进行验证:

>>> chr(29233)
'爱'

5.1.4 常用的字符编码

最早的字符编码为ASCII编码,这种编码使用一个字节来表示一个字符。一个字节能表示的范围是0-255,也就是说,这种编码最多只能表示256个字符。ASCII编码无法表示汉字等其它字符,为了满足其它地区的需要,又出现了多字节编码。

我们中国一开始制定的是GBK编码,使用两个字节来表示常用的汉字,其它地区也纷纷制定了不同的编码,用来表示本国的字符集。 为了对各地区的编码进行规范统一,出现了UNICODE编码,UNICODE编码在制定之初统一使用两个字节来表示一个字符。

(1) ASCII

ASCII码,全称为美国信息交换标准码,一种使用7个或8个二进制位进行字符编码的方案,最多可以包含256个字符。基本的 ASCII 字符集一共有 128 个字符,其中有 96 个可打印字符,包括常用的字母、数字、标点符号等,另外还有 32 个控制字符。下图为ASCII字符的码表:

image.png

(2)UNICODE

在UNICODE编码中,为每种语言中的每个字符设定了统一并且唯一的二进制编码, 这个编号范围从 0x000000 到 0x10FFFF,每个字符对应一个唯一的UNICODE数字码,UNICODE编码的形式为:在数字码(十六进制)前面加上U+。例如:"爱"的UNICODE是U+7231。

(3) UTF-8

UTF-8,是一种针对UNICODE的可变长度字符编码, 不同于UNICODE编码采用固定长度的字节数来表示字符, UTF-8使用的字节数是可变的,比如ASCII字符,在UTF-8编码中仍使用一个字节来进行编码,对于汉字等字符使用的是3个字节来进行编码。

(4) GBK

GBK编码是汉字编码字符集,采用的是单双字节变长编码,英文字符使用单字节编码,完全兼容ASCII码,中文部分采用双字节编码。

6.1.5 字符串的默认编码

Python中的字符串默认采用UNICODE进行编码,也就是说,Python中的字符串是UNICODE字符串。

6.1.6 字符串的编码与解码

通过字符串类型的encode方法,可以获取字符串以特定编码方式编码后的字节码类型:

str.encode(encoding)

参数encoding表示字符的编码方法, 返回值为bytes类型。通过字节码类型的decode方法,可以将字节码类型转换为UNICODE字符串。

bytes.decode(encoding)

参数encoding表示字符的编码方法,返回值为str类型。

代码实例-对字符串进行编码与解码

# 1.对汉字字符进行编码与解码
chinese = "我爱你"
gbk_code = chinese.encode('gbk')
chinese = gbk_code.decode('gbk')
 
# 2.对英文字符进行编码与解码
english = 'I Love You'
ascii_code = english.encode('ascii')
english = ascii_code.decode('ascii')
# 3.对日本字符进行编码与解码
japanese = '''君のことを愛している'''
unicode = japanese.encode('unicode-escape')
japanese = unicode.decode('unicode-escape')
# 4.对俄文字符进行编码与解码
russian = """я люблю тебя"""
utf8_code = russian.encode('utf-8')
russian = utf8_code.decode('utf-8')

调用bytes类型的decode方法进行解码时,传递编码方式必须兼容,否则会抛出编码错误的异常信息。我们可以在交互模式中进行验证:

>>> gbk_code = chinese.encode('gbk')
>>> gbk_code.decode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 0: 
ordinal not in range(128)

编码时传递的是gbk编码,但在解码时传递的却是ascii。ascii编码与gbk编码不兼容,故抛出了异常信息。

6.1.7 转义字符详解

编程语言中的转义字符是反斜杠符号'\'+字符构成的特殊字符,通常使用转义字符来表示字符集中定义的字符,如ASCll字符集里面的换行符。下表是常用的转义字符:

1588232596(1).jpg

使用转义字符可以避免产生歧义,比如通过转义字符\"来表示一个包含引号的字符串:

"\""

如果没有转义字符,那么系统无法识别用户究竟定义的是一个包含引号的字符串,还是一个三引号。

也可以通过引号括住其它形式的引号来表示包含引号的字符串,例如在单引号中包含双引号:'"',在双引号中包含单引号:"''"。

使用转义字符,还可以实现一些有用的特性。

(1) 使用换行符输出多行

>>>chinese = "我\n爱\n你\n"
>>>print(chinese)
我
爱
你

(2) 输出水平制表符

>>> chinese = "我\t爱\t你\t"
>>> print(chinese)
我 爱 你

在特定的应用场景下,需要禁止字对符进行转义,通过在字符串前加上r前缀,可以实现这样的功能。

>>> chinese = r"我\t爱\t你\t"
>>> print(chinese)
我\t爱\t你

字符串中包含路径时,禁止Python对其进行转义会非常有用:

>>> file_path = "D:\nosql\data"
>>> print(file_path)
D:
osql\data

输出明显是有问题的,Python将字符串中的\n字符解释成了转义字符,此时可以在字符串中加上r前缀,来禁止Python对字符进行转义。

>>> file_path = r"D:\nosql\data"
>>> print(file_path)
D:\nosql\data

6.1.8 字符串可迭代

字符串是可迭代的类型,可在for循环中对字符串中的所有字符进行迭代。

代码实例-迭代字符串中的字符:

japanese = '''君のことを愛している'''
for char in japanese:
    print(char)

代码讲解:

(1) 对字符串进行迭代,是按字符的先后排列顺序进行迭代的

(2) 通过分析程序的输出,可以更好地理解字符串这种线性的序列结构

6.1.9 大神薯条老师

跟薯条老师学后端开发,高级爬虫(JS逆向+安卓逆向),数据分析,大数据开发,量化交易,以及机器学习+深度学习算法。坚定自己的学习目标,保持学习的热情,那你成为高手只是时间问题。

薯条老师的学生在南方电网,林氏家居,京东,阿里等大厂。想系统学习Python和Java的同学,可以移步薯条老师的个人技术博客:薯条老师的个人技术博客http://www.chipscoco.com/ 对本节教程有任何不懂的同学,亦可在评论区中进行评论。薯条老师会详细解答你们提出的每一个问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2203299.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CAS存在的问题及在Java中的解决方式

CAS 介绍 CAS 可以保证对共享变量操作的原子性 CAS全称Compare And Swap&#xff0c;比较与交换&#xff0c;是乐观锁的主要实现方式。CAS在不使用锁的情况下实现多线程之间的变量同步。ReentrantLock内部的AQS和原子类内部都使用了CAS。 CAS算法涉及到三个操作数&#xff1a;需…

ICDE 2024最新论文分享|BEEP:容量约束下能够对抗异常干扰的航运动态定价系统

论文简介 本推文详细介绍了上海交通大学高晓沨教授和陈贵海教授团队发表在顶级学术会议ICDE 2024上发表的最新论文《Corruption Robust Dynamic Pricing in Liner Shipping under Capacity Constraint》&#xff0c;该论文的学生作者为胡永祎、李雪嫣、魏熙锴&#xff0c;合作…

Mac电脑word文档误删,4个方法快速恢复

对于使用Mac的用户来说&#xff0c;丢失重要的Word文档可能会为学习或工作带来严重的影响。不过&#xff0c;幸运的是&#xff0c;关于mac word 文档恢复方法还是有很多的&#xff0c;通常帮助Mac用户轻松找回丢失的word文档。接下来&#xff0c;小编将介绍一些在Mac上恢复丢失…

dayu_widgets-加载组件:MLoading和MLoadingWrapper

一、使用场景 点击按钮加载数据&#xff0c;但是查询数据需要一定的耗时&#xff0c;这段时间需要显示加载中的UI来进行遮罩。 二、使用效果 三、使用案例 # 学习笔记 MLoading控件 import asyncio from PySide2.QtWidgets import QWidget, QApplication, QVBoxLayout, QPus…

2024双十一究竟买什么比较好?为您精选五款双十一必购好物清单!

2024年的双十一购物狂欢节即将到来&#xff0c;许多人已经开始思考在这个一年一度的购物盛宴中究竟应该选购哪些商品。为了帮助大家更好地把握这次购物机会&#xff0c;我们精心为您挑选了五款双十一期间必购的好物清单&#xff0c;确保您能够买到物超所值的宝贝&#xff01; …

作业4-23

文章目录 标题1标题2 标题1 该不该好吧 标题2 写的PHP <?phpnamespace App\Http\Controllers;use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Validation\ValidatesRequests; us…

文心一言 VS 讯飞星火 VS chatgpt (366)-- 算法导论24.3 8题

八、给定带权重的有向图 G ( V &#xff0c; E ) G(V&#xff0c;E) G(V&#xff0c;E) &#xff0c;其权重函数为 w : E → ( 0 &#xff0c; 1 &#xff0c; 2. … &#xff0c; W ) w:E→(0&#xff0c;1&#xff0c;2.…&#xff0c;W) w:E→(0&#xff0c;1&#xff0c…

RK3568 buildroot系统在安装popt出错的问题

RK3568 buildroot系统在安装popt出错的问题 简介 使用 buildroot 系统给 RK3568 制作系统的时候,编译系统到 popt 这个组件时,编译出错 故障现象 gzip: popt-1.16.tar.gz: not in gzip format 上面的报错就是说 gzip 认为这个压缩包不是可以识别的格式 问题复现 我们进…

996是性价比最低的工作方式,没有之一!

不知道从什么时候开始&#xff0c;“996”工作制&#xff08;即每周工作从早9点至晚9点&#xff0c;持续6天&#xff09;已经从网络热梗&#xff0c;变成了不少企业和职场人的“工作常态”。 尤其是现如今职场中越来越频繁的裁员降薪&#xff0c;为了保住一份工作&#xff0c;…

浅入深出之了解常见的用户登录校验

文章目录 一、Cookie-Session认证校验流程缺点 二、Token校验流程缺点 三、JWT校验流程 四、JWT令牌的实践使用JWT组成引入依赖生成令牌 前言 在讲解这个问题之前&#xff0c;我们要先搞清楚基本的用户登录流流程。 用户在web登录页面填写登录信息前端发送登录信息到后端后端接…

[红队apt]CHM电子书攻击/电子教程攻击

免责声明:本文用于了解攻击者的攻击手法&#xff0c;切勿用于不法用途 前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要整理当初电子书的时代&#xff0c;利用电子书攻击的操作 CHM电子书简介 这个在当初普遍用于做教程课件&#xff0c;软件说明等应用。…

音频响度归一化 - python 实现

在处理音频样本时&#xff0c;往往我们的音频样本由于录制设备&#xff0c;环境&#xff0c;人发音的音量大小的不同影响&#xff0c;会造成音频响度不统一&#xff0c;分布在一个不同的响度值域上。为了让语音模型更好的学习音频特征&#xff0c;就有必要对音频的响度进行归一…

android中byte[] buf没有结束符,new String(buf)会不会出错?

答案是&#xff1a;不会 看例子&#xff1a; 这和c是不一样的&#xff0c;不需要特别的在字符串后面添加一个\0结束.

誉天教育十月新班启航:开启技能升级之旅,抢占未来先机!

安全HCIP 晚班 2024/10/8 存储HCIE 晚班 2024/10/10 Linux云计算架构师 晚班周末班 2024/10/14 云服务HCIP 周末班 2024/10/26 云计算HCIP 周末班 2024/10/26 RHCE 周末班 2024/11/2 数通HCIE直通车 晚班 2024/11/4 AI大模型HCIE 晚班 2024/11/11 数通HCIE直通车…

C# String 类型:那些你可能不知道的秘密

前言 嗨&#xff0c;大家好&#xff01; 今天咱们来聊一聊一个看似简单却充满玄机的话题 —— String 类型。 字符串应该是所有编程语言中使用最频繁的一种基础数据类型。 在 C# 中&#xff0c;String 可谓是特别的存在&#xff1a;它是引用类型&#xff0c;存储在托管堆中…

插件生成XML

目录 1.数据库配置 2.在pom.xml中添加插件 3.generator文件配置 1.数据库配置 # 数据库配置 spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncodingutf8&useSSLfalseusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc…

双主轴车床的优势

双主轴车床作为现代制造业中的一项重要技术&#xff0c;其优势显而易见。下面我将从几个方面详细阐述双主轴车床的优势&#xff1a; ‌一、提高生产效率‌ ‌并行加工‌&#xff1a;双主轴车床最大的特点在于其能够同时在两个主轴上进行加工&#xff0c;这种并行加工方式使得在…

LCD -

LCD 目录 LCD 回顾 应用 - 1、首先将该LCD屏官方写好的三个文件添加进工程中的api文件夹中 - 2、找到LCD的初始化函数 - 3、在LCD屏幕上显示字符串 - 4、在LCD屏幕上显示图片 - 5、在LCD屏幕上显示汉字 例&#xff1a;在LCD屏幕上显示温湿度&#xff0c;时间代码 LC…

Unsupervised Deep Embedding for Clustering Analysis

0. 论文信息 标题&#xff1a;Unsupervised Deep Embedding for Clustering Analysis期刊&#xff1a;International Conference on Machine Learning作者&#xff1a;Junyuan Xie&#xff0c;Ross Girshick&#xff0c;Ali Farhadi机构&#xff1a;University of Washington&…

每日一题|3162. 优质数对的总数 I、II|因子分解、计数方法

第一题非常简单的暴力解法。 class Solution:def numberOfPairs(self, nums1: List[int], nums2: List[int], k: int) -> int:nums2_ [i * k for i in nums2]count 0for i in nums1:for j in nums2_:count 0 if i % j else 1return count 第二题的难度提升在数量级在10万…