字符串

概念

  • unicode是字符集,utf-8/gbk的编码规则
  • python2中str存储字节码(bytes)
  • unicode使用编码转换成str, u'中文'.encode('utf-8')
  • Python3中的str相当于python2中的unicode

unicode字符集:每一个符号对应一个编码,中文从U+4E00~U+9FFF。

字节码:字符串(unicode)经过编码形成字节码,以'b开头。

字符串:字节码经过解码形成字符串。

>>> bytes_code = '中文'.encode()
>>> type(bytes_code)
<class 'bytes'>
>>> '中文'.encode()
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('gbk')
b'\xd6\xd0\xce\xc4'
>>> '中文'.encode('utf-8').decode()
'中文'

UTF-8编码规则

  • 变长
  • 单字节符号,字节每1位为0,可表示asci码
  • 对于n字节的符号,每1个字节的前n位都设为1,后面的n+1位设为0,通过1的位数即可知道占用字节数。后面字节的前两位全部设置为10(why?),剩下没有设置的位则表示unicode码。

扩展:自定义实现Utf-8编码。

大端对齐与小端对齐

高位字节保存到高位地址,低位字节保存在低位地址称之为大端对齐(大端序),反之为小端对齐。

unicode规范中,如果一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式。

转义

单引号和双引号无区别,混合使用时无需转义。

>>> "a\"b"
'a"b'
>>> "a'b"
"a'b"
>>> """a'b"""
"a'b"
>>> 'a''b''c'
'abc'
>>> 'a"b'
'a"b'

查找

可通过findrfindindex等多种方式查找:

>>> 'abcab'.find('ab')
0
>>> 'abcab'.rfind('ab')
3
>>> 'abcab'.index('ab')
0
>>> 'abcab'.find('ac')
-1
>>> 'abcab'.rfind('ac')
-1
>>> 'abcab'.index('ac')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

替换

python3中replace是全部替换:

>>> 'This is a test'.replace('s', 'a')
'Thia ia a teat'

其他

查看默认解码方式:sys.getdefaultencoding()

results matching ""

    No results matching ""