Python 字符串、编码、解码

字节

8位2进制(0~255)

字符串与编码

ASCII码(1字节,仅包含英文、数字、符号、控制符)===>Unicode码(2或4字节,汉字多数为2字节,生僻字为4字节)===>UTF-8码(1~3字节,英文只用1字节,汉字3字节。如存在大量英文则比Unicode节省空间)、UTF-16码(2或4字节)

Python3默认使用 UTF-8 编码,因此支持多语言。
Python2需要在头部添加注释:# -*- coding: utf-8 -*-

格式化

f 关键字format 方法
其中真需要大括号的场景,用{{代替{}}代替}

str_1 = "hello"
str_2 = "world"
print(f"this is {str_1} {str_2}")
print("this is {} {}".format(str_1, str_2))
print("this is {val_1} {val_2}".format(val_1=str_1, val_2=str_2))
print("this is %s" % str_1)
对于单个字符的编码:

ord()字符 => Unicode编码的任意进制表示(默认十进制)
chr()Unicode编码的任意进制表示 => 字符

三引号'''或"""

允许一个字符串跨多行,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式

Unicode 字符串

引号前的u表示这里创建的是一个 Unicode 字符串。如果你想加入一个特殊字符,可以使用 Python 的 Unicode-Escape 编码。如下例所示:

>>> u'Hello\u0020World !'
u'Hello World !'
转义序列
  • \n 换行
  • \t 制表符(tab)
  • \'\" 单双引号
  • \\ \
禁止转义

引号前的r表示该字符串不会转义为制表符

print(r'test\tddd') #test\tddd
print('test\tddd') #test    ddd
bytes类型

Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。
Python对bytes类型的数据用带b前缀的单引号或双引号表示,其中\x表示16进制(Hexadecimal):

x = b'\xe5\x90\xb4'

采用encode()进行对应编码,采用decode()进行解码,参数为编码类型,如:

>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
>>>b'\xff\xfeKm\xd5\x8b(u'.decode('utf-16')
'测试用'
>>>"测试用".encode('unicode_escape')
b'\\u6d4b\\u8bd5\\u7528'
>>>"测试用".encode('gb2312')
b'\xb2\xe2\xca\xd4\xd3\xc3'
>>>"测试用".encode('utf-8')
b'\xe6\xb5\x8b\xe8\xaf\x95\xe7\x94\xa8'
  • .decode([encoding], [errors='strict'])
    默认的参数就是strict,代表遇到非法字符时抛出异常;
    如果设置为ignore,则会忽略非法字符继续解析;
    如果设置为replace,则会用?取代非法字符;
    如果设置为xmlcharrefreplace,则使用XML的字符引用。
字符 ASCII Unicode UTF-8
A 01000001 00000000 01000001 01000001
x 01001110 001011011 11100100 10111000 10101101

如 "中" ,Unicode编码为 \u4e2d,Unicode 01001110001011011的对应十进制ord为20013 , UTF-8对应16进制encodeb'\xe4\xb8\xad'

注意,只有bytes可以decode,而字符串只能encode,因此当字符串中文乱码时,需要先转为bytes再转回字符串:s.encode("utf-8").decode("unicode_escape")

字符串方法

  • replace
"hello world".replace("hello", "fuck")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容