最近发现很多小伙伴搞不清楚编码和解码,以及字符串前缀 f、r、u 、b 的区别和使用。那以下内容千万不要错过!

1 ASCII,Unicode,GBK和utf8

ASCII (American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,共定义了128 个字符 。
Unicode:统一码(又称万国码),它为每种语言中的每个字符设定了唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
GBK(“国标”、“扩展”汉语拼音的第一个字母):即汉字编码字符集,主要针对汉字编码而形成的解决方案。
UTF-8(8-bit Unicode Transformation Format):是针对 Unicode 的一种可变长度字符编码,包含全世界所有国家需要用到的字符,且与 ASCII 相容。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。
在 python 中,主要有两种类型的字符串类型,分别为 str 和 byte。其中,str 表示 Unicode 字符(ASCII 成者其他)。byte 表示二进制数据(包括编码的文本)。这两种类型的字符串不能拼接在-起使用,str 在计算机内存中需要以 Unicode 字符表示,一个字符对应若干个字节。但是,如果在网络上传输或者保存到磁盘中,需要把 str 转换为字节类型,即为 byte 类型。

2.str 和 byte 如何进行互相转化:

带有 b 前缀的字符串(单引号/双引号)是字节类型字符串,例如,b'\xd2\xb0'

2.1 str 转 byte

str 转 byte 称为编码的过程。使用 encode()方法,常用 utf-8 和 GBK 编码,示例如下:
str=
'人生苦短,我用 python!'
str1=str.encode(
'utf-8'
)

print(str1)

str=
'人生苦短,我用 python!'
str1=str.encode(
'GBK'
)

print(str1)

2.2 byte 转 str

称为解码的过程。使用 decode()方法,常用 utf-8 和 GBK 字符解码,示例如下:
str=
b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8python\xef\xbc\x81'
str1=str.decode(
'utf-8'
)

print(str1)

str=
b'\xc8\xcb\xc9\xfa\xbf\xe0\xb6\xcc\xa3\xac\xce\xd2\xd3\xc3python\xa3\xa1'
str1=str.decode(
'GBK'
)

print(str1)

3.字符串前缀 f、r、u 的作用:

3.1 字符串前缀 f

字符串前缀 f,这个语法只能在 Python3.6 以上版本才可以使用。使用参考如下格式,将需要输出的变量使用{}包括起来
num=
0
print(
f'输出{num}'
)

3.2 字符串前缀 r

字符串前缀 r 表明后面字符串以固定样式输出,拒绝特殊字符(如\n、\t、\b)等格式,忽略转义字符。使用参考如下格式,注意和没有前缀 r 输出的时候做个区别
print(
r'\t人生苦短,我用python!\n'
)

print(
'\t人生苦短,我用python!\n'
)

3.3 字符串前缀 u

字符串前缀 u,表明后面字符串以 Unicode 格式进行编码,防止出现因编码格式不一致而导致的乱码。一般用在中文字符串前,但是并不局限中文字符串。注意和字符串前缀 b 的区别,以及 2.x 和 3.x 中 python 版本的不同
注:不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行。一般英文字符在使用各种编码下,,基本都可以正常解析, 所以一般不带 u。在 python2 中,普通字符串是以 8 位 ASCII 码进行存储的,而 Unicode 字符串则存储为 16 位 unicode 字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u。在 python3 中,所有的字符串都是 Unicode 字符串。
以下例子是 python3 中的用法,加 u 和不加 u 前缀的字符串是等价的,且都是 str 类型(在 python2 中字符串不加前缀和加前缀 b 字符串是等价的,都是 str 类型。因此如果你的项目是 python2 要兼容 python3 的话,需要在项目中将字符串加前缀 b)
print(
"abc"
)

print(
u"abc"
)

print(
b"abc"
)

print(type(
"abc"
))

print(type(
u"abc"
))

print(type(
b"abc"
))

继续阅读
阅读原文