1. ASCII
- 英文字符、数字和一些符号用ASCII编码;
- ASCII使用一个byte编码,这样中文以及其它的语言用一个byte是不能处理的,各国制定了自己语言的编码,如GB2312(中文)、Shift_JIS(日文)、Euc-kr(韩文)等,这样在多语言混合的文本中,显示会出现乱码。
2.Unicode
- 为解决多语言混合显示乱码的问题,Unicode应运而生,所有语言在内存中的编码方式都是Unicode;
- Unicode通常是2个byte,Unicode虽然解决了多语言冲突的问题,但是它所占的空间也大,例如,当文本内容都是英语时,这个时候有一本的空间时空的,造成了存储浪费。
3.UTF-8
- 为解决Unicode的存储浪费的问题,UTF-8诞生了,它时一种可变长编码;
- UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
综上所述,文件在内存编码为Unicode,在存储空间中存储为指定的编码格式如UTF-8, ascii, GB2312等。
- 从存储空间中读取文件到内存时,要把文件从其编码格式转换为Unicode编码;
- 从内存空间写入存储空间时,要把文件从Unicode编码指定编码格式。
举个栗子:
字符串s,存储格式为UTF-8,转换为GB2313
# s先解码为Unicode,把从Unicode编码为GB2313
>>> s.decode('utf-8').encode('GB2312')
4.python中的codecs模块的open()方法,通过解码文本的编码格式为Unicode来处理文本
import codecs
# 把title.txt中的内容从utf-8解码为Unicode
with codecs.open('title.txt', 'r', 'utf-8') as f:
names = f.read()
- 摘自字符串和编码
网友评论