python 编码

来源:互联网 发布:手机直播间源码 编辑:程序博客网 时间:2024/06/05 11:26

1.ASCII、Unicode和UTF-8

计算机只能处理数字,如果要处理文本,就必须把文字转换为数字。
因为计算机是美国人发明的,因此最早只有127个字母被编码到计算机里,包含大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码。
但处理中文用一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以中国制定了GB2312编码,用来把中文编进去。
多语言就有多国的编码,结果会出现冲突,导致乱码。
为了解决乱码问题,Unicode会把所有语言都统一到一套编码里。Unicode最常用的是用两个字节表示一个字符。Unicode和ASCII编码的区别是:ASCII编码是1个字节,而Unicode编码通常是2个字节。使用Unicode编码的一个问题是存储空间浪费,如果写的文本基本是英文,用Unicode编码比ASCII编码需要多一倍的存储空间。
考虑空间的问题,出现了把Unicode编码转化为”可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符串根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节。如果要传输的文字包含大量英文字符,用UTF-8就能节省空间。

2.python字符串的编码

默认编码是ASCII编码。
python也支持Unicode,以Unicode表示的字符串用u’…’表示,如在python交互环境下:

>>> '中''\xe4\xb8\xad'>>> u'中'u'\u4e2d'

其中字符串’xxx’虽然是ASCII编码,也可看作是Unicode编码,而u’xxx’只能是Unicode编码。
Unicode编码和UTF-8编码的转化:

>>> u'中文'.encode('utf-8')'\xe4\xb8\xad\xe6\x96\x87'>>> print u'中文'.encode('utf-8')中文>>> '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')u'\u4e2d\u6587'>>> print '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')中文

为了使用其他编码方式以及让python解释器识别,需在python源文件的顶部用特殊注释来解释编码,如下为流行编辑器能识别的格式:

#!/usr/bin/python# -*- coding: <encoding name> -*-

参考文章

1.PEP 263 – Defining Python Source Code Encodings
2.廖雪峰python教程-字符串和编码

0 0
原创粉丝点击