总览:ascii –> unicode –> utf-8
- ascii:最早的,容量最小的编码方式。1个字节表示一个字符。
- unicode:加入多国字符,一般是2个字节表示一个字符,偏僻字用4个字节。缺点:浪费存储空间。
- utf-8:为了解决浪费空间的问题,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
在计算机内存中,统一使用Unicode编码。当需要保存到硬盘或者需要传输的时候,可以转换为UTF-8编码。
1.Python的诞生比Unicode标准发布的时间还要早,所以最早的Python只支持ASCII编码
Python内建的ord()和chr()函数,可以把字母和对应的数字相互转换:
>>> ord('A')
65
>>> chr(65)
'A'
2.Python在后来添加了对Unicode的支持,以Unicode表示的字符串用u'...'
表示
>>> u'中'
u'\u4e2d'
\u
后面是十六进制的Unicode码。
3.unicode –> utf-8
>>> u'ABC'.encode('utf-8')
'ABC'
>>> u'中文'.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'
英文字符转换后表示的UTF-8的值和Unicode值相等(但占用的存储空间变小,2个字节变为1个字节),而中文字符转换后1个Unicode字符转化为UTF-8字符后,两个字节变为3个字节。用len()函数显示,从1个字符长度变为3个字符。
>>> len(u'中')
1
>>> len(u'中'.encode('utf-8'))
3
4.utf-8 –> unicode
>>> 'abc'.decode('utf-8')
u'abc'
>>> test = '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
u'\u4e2d\u6587'
>>> print test
中文
如何保存文件
- 保存:Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。
- 读取:当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头(第一行或第二行)写上这一行行
# -*- coding: utf-8 -*-
参考链接点我