字符串实践常见问题总结
最近发现很多小伙伴搞不清楚编码和解码,以及字符串前缀 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"))
微信扫码关注该文公众号作者