字符集
计算机只能处理数字(其实就是数字0和数字1),如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),0 - 255被用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码。
ASCII码表使用7位二进制表示一个字符,它的区间范围时0~127,一共只能表示128个字符,仅能支持英语。随着计算机科学的发展,西欧语言、希腊语、泰语、阿拉伯语、希伯来语等语言的字符也被添加到码表中,形成了一个新的码表ISO8859-1(又被称为Latin1)码表。ISO8859-1使用8位二进制表示一个字符串,完全兼容ASCII码表。
Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
字符和编码相互转换
使用chr和ord方法,可以实现字符和编码之间的相互转换。
print(ord('a')) # 使用ord方法,可以获取一个字符对应的编码
print(chr(100)) # 使用chr方法,可以获取一个编码对应的字符
编码规则
使用Unicode为每种语言的每个字符都设定了唯一的二进制编码,但是它还是存在一定的问题,不够完美。
例如,汉字 “你” 转换成为一个字符结果是0x4f60,转换成为二进制就是 01001111 01100000,此时就有两个问题:
- 1001111 01100000 到底是一个汉字 “你” ,还是两个 Latin1 字符?
- 如果Unicode进行了规定,每个字符都使用n个八位来表示,对于Latin1字符来说,又会浪费很多存储空间。
为了解决这个问题,就出现了一些编码规则,按照一定的编码规则对Unicode数字进行计算,得出新的编码。在中国常用的字符编码有 GBK,Big5和utf8这三种编码规则。
使用字符串的encode方法,可以将字符串按照指定的编码格式转换称为二进制;使用decode方法,可以将一个二进制数据按照指定的编码格式转换成为字符串。
s1 = '你'.encode('utf8') # 将字符 你 按照utf8格式编码称为二进制
print(type(s1)) # <class 'bytes'>
print(s1) # b'\xe4\xbd\xa0'
s2 = s1.decode('utf8') # 将二进制按照utf8格式解码称为字符串
print(s2)
s3 = '你'.encode('gbk') # 将字符 你 按照gbk格式转换称为二进制
print(s3) # b'\xc4\xe3'
s4 = s3.decode('gbk') # 将二进制按照gbk格式解码称为字符
print(s4)
思考:文字产生乱码的原因以及解决方案。
学习目标
- 字符串的表示方式
- 字符串的下标和切片
- 字符串的常见操作
- 字符集和编码
- 成员运算符
- 字符串的format方法
成员运算符
成员运算符 (in 和 not in) 可以用来快速的判断元素是否在指定的可迭代对象里,语法格式 要判断的元素 in 可迭代对象。
in运算符
思考:怎样判断一个字符是否在指定的字符串里?
msg = 'hello'
char = input('请输入一个字符:')
# 使用字符串的 find 方法可以判断字符是否存在
if msg.find(char) != -1:
print('您输入的字符存在')
else:
print('您输入的字符不存在')
# 使用 in 运算符可以更加方便的查看字符是否存在
if char in msg:
print('您输入的字符存在')
else:
print('您输入的字符不存在')
not in 运算符
和 in 运算符的使用方式一致,只不过 not in 用来判断元素是否 不在 指定的字符串里。
注意:不是所有的数据都能使用身份运算符,身份运算符后面只能是一个可迭代对象。
'h' in 'hello'
'zhangsan' in ['lisi','henry','merry','jack']
1 in 123 # 报错,数字 123 不是一个可迭代对象
进阶案例
【Python】Python 实现猜单词游戏——挑战你的智力和运气!
【python】Python tkinter库实现重量单位转换器的GUI程序
【python】使用Selenium获取(2023博客之星)的参赛文章
【python】使用Selenium和Chrome WebDriver来获取 【腾讯云 Cloud Studio 实战训练营】中的文章信息
使用腾讯云 Cloud studio 实现调度百度AI实现文字识别
【玩转Python系列【小白必看】Python多线程爬虫:下载表情包网站的图片
【玩转Python系列】【小白必看】使用Python爬取双色球历史数据并可视化分析
【玩转python系列】【小白必看】使用Python爬虫技术获取代理IP并保存到文件中
【小白必看】Python图片合成示例之使用PIL库实现多张图片按行列合成
【小白必看】Python爬虫实战之批量下载女神图片并保存到本地
【小白必看】使用Python爬取喜马拉雅音频并保存的示例代码
【小白必看】使用Python批量下载英雄联盟皮肤图片的技术实现
【小白必看】轻松获取王者荣耀英雄皮肤图片的Python爬虫程序
【小白必看】Python爬虫实战:获取阴阳师网站图片并自动保存
小白实战100案例: 完整简单的双色球彩票中奖判断程序,适合小白入门
使用 geopandas 和 shapely(.shp) 进行地理空间数据处理和可视化
爬虫入门指南(7):使用Selenium和BeautifulSoup爬取豆瓣电影Top250实例讲解【爬虫小白必看】
爬虫入门指南(6):反爬虫与高级技巧:IP代理、User-Agent伪装、Cookie绕过登录验证及验证码识别工具
爬虫入门指南(5): 分布式爬虫与并发控制 【提高爬取效率与请求合理性控制的实现方法】
爬虫入门指南(4): 使用Selenium和API爬取动态网页的最佳方法
爬虫入门指南(3):Python网络请求及常见反爬虫策略应对方法
深度学习模型在图像识别中的应用:CIFAR-10数据集实践与准确率分析
MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
使用Python和Selenium自动化爬取 #【端午特别征文】 探索技术极致,未来因你出“粽” # 的投稿文章
Python多线程与多进程教程:全面解析、代码案例与优化技巧
Python入门教程:掌握for循环、while循环、字符串操作、文件读写与异常处理等基础知识