Python_入门_3:类型_字节(bytes)和字符串(string)
目录
一、声明
本作为python学习笔记,仅作为学习记录和分享
本章节为python入门
本躯水平极其有限,恳请斧正
环境:Jupyter_notebook(Anaconda)-Python3.0
参考:https://c.biancheng.net/index.html
推荐此网站
二、字符串
2.1 字符串
python中,字符串用双引号或单引号描述""''
python中的双引号和单引号没有任何区别

python的字符串非常随意

但要注意一个问题,字符串中的单双引号会影响机器的判断,必须转译或是使用不同的引号
尝试下述代码并查看报错信息
string_box="她说:"你让我感到害怕""
方法一:使用转移符号反斜杠\
方法二:使用不同的引号
方法三:使用中文引号

2.2 换行、长字符串、和原始字符串
python中的换行方式为在行末加反斜杠

同样的,换行可以在任何情况下使用

python中使用三对引号来作为整体字符串的表达方式

python中可以使用r作为原始字符串的描述
原始字符串中的反斜杠被当作普通文本,所以不需要转译(除了引号前的一位)

但需要注意的是,引号并不会被当成普通文本,所以原始字符串通常只适用于地址
三、字节类型
3.1 BYTES
python中内置了字节类型
许多人会困惑于字符串和字节类型的区别,其实这就像英语和字母的区别、牛肉和蛋白质的区别
字符串是由字节映射人类语言(或是图片、视频等),而字节是计算机本身的储存方式
有时候我们只关心字节数据,比如I/O、视频、图片的传输,至于通信之后怎么使用这些数据,那就是下一个问题了
想创建一个字节类型,有许多种方法
其中最简单的一种是由字符串转换而来
例如:

但这里会有许多人由此产生了一种误区——认为字节就是字符串编码而来。
字节是可以由字符串编码而来,但字节不等于字符串的编码
我们可以将这个字节串打印下来

但如果我们定义了一个字符串的话,是无法直接打印出相应字节的
请尝试编译以下代码并查看报错信息:
string_box1='Hello'
print(string_box1.hex())
这是由于字符串是一串人类语言,要想得出计算机语言必须通过映射。当然,根据映射方法的不同,结果天差地别
3.2 映射——编码和解码
所以我们必须告诉计算机用哪种映射方法
这种将目标转换为数据的操作就是我们常说的“编码(encode)”(这里我称之为目标而不是字符的原因是,目标不仅可以是语言,也可以是音频、图像等)
现在我们将“Hello”这个字符串通过‘UFT-8’方式编码并打印出来

我们还可以尝试不同的编码方式,现在查询一下支持的编码方式

现在尝试一下不同的编码方式

由此可见,大部分的编码对于ASCII字符都是兼容的
但这并非绝对,例如
print(string_box1.encode('UTF-16').hex())
print(string_box1.encode('UTF-32').hex())
当然,如果非ASCII标准的字符,互相之间基本上是不兼容的,比如中文编码和日文编码
相反,我们可以将数据转换为目标,这种操作就是我们常说的“解码(decode)”
例如,定义一段中文
string_box1='史上最甜的躯'
print(string_box1)
将其按照GBK格式编码

再将其解码回去

很神奇吧?
这就是编码和解码的方式
计算机、手机等通信设备之间,发送的就是一串串数据,然后再解码成我们能理解的东西,这就是一种通讯
当你在微信中给好朋友发送一串中文,计算机就会先将其编码,然后通过复杂精密高效的通信发送给朋友的手机,朋友的手机解码后,就会看到你的消息了
3.3 乱码
如此便有一个问题,如果编码解码不兼容会怎样呢?

你说得对,但是锟斤拷烫烫烫!
四、整体代码及注释
#字符串
#python中,字符串用双引号或单引号描述""''
#python中的双引号和单引号没有任何区别
string_box="史上最甜的躯"
print(string_box)
string_box='我是谁?'
print(string_box)
#python的字符串非常随意
string_box="114514哼哼哼啊啊啊啊啊啊啊啊啊我是不会告诉你任何事的http.uni.sydney-/C/爱情动作片/"
print(string_box)
#但要注意一个问题,字符串中的单双引号会影响机器的判断,必须转译或是使用不同的引号
#尝试下述代码并查看报错信息
#string_box="她说:"你让我感到害怕""
#方法一:使用转移符号反斜杠\
string_box="她说:\"你让我感到害怕\""
print(string_box)
#方法二:使用不同的引号
string_box='她说:"你让我感到害怕"'
print(string_box)
#方法三:使用中文引号
string_box='她说:“你让我感到害怕”'
print(string_box)
#换行
#python中的换行方式为在行末加反斜杠
string_box="当一套形式体系可以承载任何内容时,这套形式本身的价值在哪里?\
当我们试图去解构形式主义时,是否能给出实用主义的解决方案?\
批判性思考的本身是否存在着对现实基础的忽视?\
保守主义的思维是否无视了大众对更好的追求?\
但我想更迫切需要去思考的是,\
真正的思想和创意,现如今该如何在规范的框架下被看见。"
print(string_box)
#同样的,换行可以在任何情况下使用
num=1+\
1
print(num)
#长字符串
#python中使用三对引号来作为整体字符串的表达方式
string_box="""你说得对,
BUT I'd say
猿神牛逼"""
print(string_box)
#原始字符串
#python中可以使用r作为原始字符串的描述
#原始字符串中的反斜杠被当作普通文本,所以不需要转译(除了引号前的一位)
string_box=r'He just said Gday and gived me a confused number:114514.'
print(string_box)
#但需要注意的是,引号并不会被当成普通文本,所以原始字符串通常只适用于地址
#字节(bytes)
#python中内置了字节类型
#许多人会困惑于字符串和字节类型的区别,其实这就像英语和字母的区别、牛肉和蛋白质的区别
#字符串是由字节映射人类语言,而字节是计算机本身的储存方式
#有时候我们只关心字节数据,比如I/O、视频、图片的传输,至于通信之后怎么使用这些数据,那就是下一个问题了
#想创建一个字节类型,有许多种方法
#其中最简单的一种是由字符串转换而来
#例如:
bytes_box1=b'Hello'
print(bytes_box1)
print(type(bytes_box1))
#我们可以将这个字节串打印下来
print(bytes_box1.hex())
#但如果我们定义了一个字符串的话,是无法直接打印出相应字节的
#请尝试编译以下代码并查看报错信息:
string_box1='Hello'
#print(string_box1.hex())
#这是由于字符串是一串人类语言,要想得出计算机语言必须通过映射。当然,根据映射方法的不同,结果天差地别
#所以我们必须告诉计算机用哪种映射方法
#这种将目标转换为数据的操作就是我们常说的“编码(encode)”(这里我称之为目标而不是字符的原因是,目标不仅可以是语言,也可以是音频、图像等)
#现在我们将“Hello”这个字符串通过‘UFT-8’方式编码
print(string_box1.encode('UTF-8').hex())
#我们还可以尝试不同的编码方式,现在查询一下支持的编码方式
import encodings
#print(encodings.aliases.aliases)
#尝试不同的编码方式
print(string_box1.encode('ASCII').hex())
print(string_box1.encode('gb2312').hex())
print(string_box1.encode('cp857').hex())
#由此可见,大部分的编码对于ASCII字符都是兼容的
#但这并非绝对,例如
print(string_box1.encode('UTF-16').hex())
print(string_box1.encode('UTF-32').hex())
#当然,如果非ASCII标准的字符,互相之间基本上是不兼容的
#相反,我们可以将数据转换为目标,这种操作就是我们常说的“解码(decode)”
#例如,定义一段中文
string_box1='史上最甜的躯'
print(string_box1)
#将其按照GBK格式编码
GBK_encoded=string_box1.encode('GBK')
print(GBK_encoded)
#再将其解码回去
GBK_decoded=GBK_encoded.decode('GBK')
print(GBK_decoded)
#哇哦,是不是很神奇?
#这就是编码和解码的方式
#计算机、手机等通信设备之间,发送的就是一串串数据,然后再解码成我们能理解的东西,这就是一种通讯
#当你在微信中给好朋友发送一串中文,计算机就会先将其编码,然后通过复杂精密高效的通信发送给朋友的手机,朋友的手机解码后,就会看到你的消息了
#如此便有一个问题,如果编码解码不兼容会怎样呢?
utf8_1=b'\xef\xbf\xbd'*3+b'\xcc'*10
utf8_2='史上最甜的躯'.encode('utf-8')
print(utf8_1.decode('gbk', errors='ignore')) #强制忽略无效字节
print(utf8_2.decode('gbk', errors='ignore')) #强制忽略无效字节
#你说得对,但是锟斤拷烫烫烫!
五、参考
Python字符串详解(包含长字符串和原始字符串)https://c.biancheng.net/view/4227.html
Python bytes类型及用法https://c.biancheng.net/view/2175.html
更多推荐



所有评论(0)