Python 字符串、编码、解码

字符串与编码

Unicode 是对 ASCII 的扩充,“可变长编码” UTF-8 编码用于储存/传输时节约 Unicode 浪费的空间。
ASCII码(1字节)===>Unicode码(汉字多数为2字节,生僻字为4字节)===>UTF-8码(1~3字节,英文只用1字节,汉字3字节。如存在大量英文则比Unicode节省空间)、UTF-16码(2或4字节)

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

对于单个字符的编码:

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

len()

用于计算str的字符串长度,或bytes的字节数,如:

>>> len('中文')
2
>>> len('中文'.encode('utf-8'))
6
三引号'''或"""

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

Unicode 字符串

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

>>> u'Hello\u0020World !'
u'Hello World !'
禁止转义

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

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

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

x = b'ABC'

采用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'

字符串方法

  • replace
"hello world".replace("hello", "fuck")

你可能感兴趣的:(Python 字符串、编码、解码)