文章目录
一、字符编码
1.1 ASCII和Unicode出现
- 计算机只能处理数字
- 最早发明ASCII用1个字节表示英文、数字、符号;
- 中国人发明GB2312用至少2个字节表示汉字;
- 为了统一上百种语言编码,Unicode应运而生,通常用2个字节表示字符。
1.2 UTF-8出现
- 若整篇英语文档用Unicode编码,会多出一倍存储空间,需要“可变长编码”UTF-8;
- 英文用1个字节,汉字通常3字节,生僻字用4-6字节等;
- ASCII可看成是UTF-8组成部分。
1.3 举例:
- 文件被读到内存中用Unicode编码,而保持在硬盘或传输时,用UTF-8;
- 浏览网页,服务器会把Unicode内容转换成UTF-8传输。网页的源码上会有类似<meta charset="UTF-8" />的信息,表示该网页正是用的UTF-8编码。
二、Python字符串
2.1 Python3字符串采用Unicode编码
函数ord()获取编码和chr()转换字符:
print("ord('A')=%s, ord('中')=%s" % (ord('A'), ord('中')))
print("chr(66)=%s, chr(25991)=%s" % (chr(66), chr(25991)))
ord('A')=65, ord('中')=20013
chr(66)=B, chr(25991)=文
2.2 编/解码操作
Python字符串类型为str,内存中Unicode表示。
- 编码: str转换为bytes类型
print('abc'.encode('utf-8'))
print('abc'.encode('ascii'))
print('中文'.encode('utf-8'))
b'abc'
b'abc'
b'\xe4\xb8\xad\xe6\x96\x87'
- 解码:bytes类型转换为字符
print(b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8'))
print(b'abc'.decode('ascii'))
中文
abc
2.3 计算字符串长度
print(len('abc'))
print(len('中文'))
print(len('abc'.encode('utf-8')))
print(len('中文'.encode('utf-8')))
3
2
3
6
2.4 坚持使用utf-8编码
- python源代码加上# -- coding: utf-8 --,确保解释器可以读懂
- 保存源代码时使用"Encode in UTF-8 without BOM"
- BOM——Byte Order Mark,就是字节序标记。UTF-8不需要BOM头。
2.5 python字符串格式化
print('Age: %s. Gender: %s' % (25, True))
print('Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125))
Age: 25. Gender: True
Hello, 小明, 成绩提升了 17.1%
————————————————————————
资料来源:廖雪峰网站 https://www.liaoxuefeng.com/