Python字符串前缀(u/r/b)的区别
"u"前缀&无前缀
字符串以Unicode编码格式存储
- 能存储中文,能转义
- Python字符串前不加前缀默认采用"u"前缀方式编码,即无前缀="u"前缀
# 字符串"u"前缀&无前缀案例
str1 = '你好\tHello'
str2 = u'你好\tHello'
print(str1)
print(str2)
"""
运行结果:
你好 Hello
<class 'str'>
你好 Hello
<class 'str'>
"""
"r"前缀
字符串所有字符视为普通字符
- 能存储中文,不能转义
- 去掉反斜杠的转义机制
# 字符串"r"前缀案例
str1 = u'你好\tHello'
str2 = r'你好\tHello'
print(str1)
print(type(str1))
print(str2)
print(type(str2))
"""
运行结果:
你好 Hello
<class 'str'>
你好\tHello
<class 'str'>
"""
"b"前缀
字符串以ASCII编码格式存储
- 不能存储中文,不能转义
- 打印结果会带一个"b",表示该字符串是bytes类型
# 字符串"b"前缀案例
str1 = b'你好\tHello'
str2 = b'Hello\tHello'
print(str1)
print(str2)
"""
运行结果:
SyntaxError: bytes can only contain ASCII literal characters.
b'Hello\tHello'
<class 'bytes'>
"""
str和bytes类型的转换
- str->bytes
- 格式:
str.encode('utf-8')
或bytes(str, encoding = 'utf8')
- 以utf-8编码格式编码
- 格式:
# str->bytes案例
s1 = 'Hello,World'
print(s1)
print(type(s1))
s2 = s1.encode('utf-8')
print(s2)
print(type(s2))
"""
运行结果:
Hello,World
<class 'str'>
b'Hello,World'
<class 'bytes'>
"""
- bytes->str
- 格式:
bytes.decode('utf-8')
或str(bytes, encoding = 'utf-8')
- 以utf-8编码格式解码
- 格式:
# bytes->str案例
b1 = b'Hello,World'
print(b1)
print(type(b1))
b2 = b1.decode('utf-8')
print(b2)
print(type(b2))
"""
运行结果:
b'Hello,World'
<class 'bytes'>
Hello,World
<class 'str'>
"""