字节
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进制encode
为b'\xe4\xb8\xad'
注意,只有bytes可以decode,而字符串只能encode,因此当字符串中文乱码时,需要先转为bytes再转回字符串:s.encode("utf-8").decode("unicode_escape")
字符串方法
- replace
"hello world".replace("hello", "fuck")