python3学习:习题23

习题23字符串、字节串和字符编码

这一节有点难,只能说勉强完成了四个目标,教材里稍微扩展一点点的内容都没有尝试(也是因为现在太晚了。。明天还要搬砖),下次再看的时候要对笔记进行补充。
目标:

  • 1.现代计算机如何存储人类语言,并进行显示或者处理。python3 将其称为字符串。(string)
  • 2.如何把python的字符串编码和解码成一个叫字节串(bytes)的类型。
  • 3.如何处理在字符串和字节处理中出现的错误。
  • 4.如何阅读代码,弄明白你看到的新东西。

在这里插入图片描述
教材提供的源文件有点问题(好像说是因为我的终端没法显示utf-8,但我在他提供的网页上直接浏览也是这样的乱码,不懂。。。),很多字符变成了乱码,所以代码的运行和教材上稍微有点差别,但是应该是没有错的。和教材运行结果相当类似
在这里插入图片描述
不懂的部分(也太多了额。。。):

  • 1.这次没有 from sys import argv ,直接上 import sys了,这不是把参数位置变成了模块位置了么,是语法的要求么,和前者的作用一样么?
  • 2.if语句后直接跟的line变量,没有条件,if的内容直接套用函数print_line,这个if有卵用(像是个限定条件的作用,如果符合条件就返回函数的值,但是line后没有跟什么条件啊,line是读取文件的某一行,能作为什么条件)?
  • A:这里的line是读取文件的某一行,if的作用就是只要line读取了文件,返回了某个值,则if为TRUE ,接着下面的操作(其实在这里,if的真正作用是防止下面的再次调用main函数陷入无限循环)。
  • main函数中使用了print_line函数,但这个print_line函数是在main函数的后面定义的,这也行?python3的代码读取到这里竟然不会报错
  • strip,encoding(编码),errors,encode,decode 这些都是什么?怎么用?

开关、约定和编码
1计算机基础知识:
“编码”就是一种大家都认同的转换标准。用计算机的0和1来编码出更大的数字。而“字节”则表示一个8位的(0和1)的序列。
在早期,把7位、8位等位的数字转换为文字的标准有很多,最常见的标准是
“美国信息交换标准代码”
(ASCII),这个标准把数字和字母互相对应,。比如90表示Z,用位表示就是1011010
在这里插入图片描述
有了ASCII,我们就能用8位(1字节)编码一个字符,这样我们就可以把字符串联在一起,合成一个单词。早期的计算机中的文本都是这种字节列。这个约定序列最终会转换成开关的通断(?)
但ASCII只能对英语和若干类似的语言进行编码,一个字节可以存放256个数字(0~255),但是世界上的语言用到的字符数量远远超过256个,于是不同国家为各自的语言创造了不同的编码方式,但是这样在一种语言中使用另一种语言就会遇到问题。
因此,有人创造了Unicode。即所有人类语言通用的**“通用编码”**。Unicode和ASCII类似,但你可以使用32位编码一个Unicode字符,这对所有语言都是够用的。里面的多余空间,现在用来储存“微笑”之类的表情。
但是,为了避免浪费,我们把大部分常用字符用8位编码,如果需要更多的字符,就“逃”去使用更大的数。于是我们就又有了一个编码规定,就是一种压缩编码方式,针对常用的字符使用8位,需要的时候再去使用16位或者32位。
这一规定在python里叫做utf-8。

解剖输出
<===>左边是utf-8的每一个字节的数字(十六进制),右边是真正输出的utf-8字符。用b’ '来告诉python这是字节。

解剖代码
如果要处理的是原始字节串,就需要通过.decode()来获取字符串。原始字节串不包含编码方式,它仅仅是字节序列(就是存在电脑里的那一串串数字),所以必须告诉python“把它解码成utf-8字符串”;而在处理字符串时,有时候电脑会报错不知道怎么按你的要求编码字符串,这时候你需要通过.encode()来获取你需要的字节。
即:“解码字节串,编码字符串”,需要把字节串解码转成字符串,就是“解码字节串”,要把字符转换成字节串,就是“编码字符串”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值