目录

一、声明

二、字符串

2.1 字符串

2.2 换行、长字符串、和原始字符串

三、字节类型

3.1 BYTES

3.2 映射——编码和解码

3.3 乱码

四、整体代码及注释

五、参考


一、声明

本作为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

更多推荐