编码相关2 python编码 之 基本原理

来源:互联网 发布:软件故障处理要求 编辑:程序博客网 时间:2024/06/15 17:07

在py2中,编码是一个几乎伴随始终的问题。


一、.py 文件编译的原理和步骤(对于文件中字符而言):

 

python编译器在解释 .py 文件前,对文件中的字符处理分为以下几个步骤:


1、读出py文件内容

2、将读出的内容根据文件编码转换为Unicode编码(Unicode成为中间编码)

3、分词标注

4、解释它。对于原本就是Unicode的字符,创建一个Unicode对象;对于原来是str的字符,将会从Unicode按照文件编码再编码为str对象。


对于以上4个步骤,有几点说明:

1、python中的文件编码可以由程序员自由指定(#coding=字符编码)

2、若没有指定,则默认为ASCII编码

3、异常是如何出现的:

举个例子,如果你的文件中包含了UTF-8的编码方式。

正常的步骤是,读入文件,将文件中的字符由UTF-8解码为unicode,然后再将unicode编码为UTF-8。

//  但如果没有将文件的编码方式指定为(#coding=UTF-8),当进行上述第二步和第四步时,编译器将会使用python中默认的ASCII进行编码和解码。于是异常出现。

4、对于str对象和Unicode对象,在下面详细介绍。


二、str和Unicode对象

1、python中一切皆对象。字符对象分为两种,一种是Unicode对象,一种是str对象

2、python中的字符是以Unicode为基础的(即Unicode作为中间编码存在)

3、str是字符串对象,但是可以有很多种不同的编码,如UTF-8,GBK等

4、不同编码方式的str对象,不可以直接转换,必须通过Unicode作为中间编码进行转换。

例如:若要将UTF-8转换为GBK,首先将UTF-8解码(decode)为Unicode,然后再将Unicode编码(encode)为GBK。

5、关于编码和解码:

编码:encode

解码:decode

其实编码和解码也是以Unicode编码为基础来讨论的。由于python中以Unicode作为中间(基础)编码存在,所以由str转换为基础编码称为解码,而由基础编码转换为str称为编码。

6、python中许多函数和命令,接受Unicode编码方式。在使用这些函数或者命令时,必须确保所涉及到的字符串的编码方式为Unicode。例如:


python2.7中的print语句,接受Unicode编码方式。

<span style="font-size:18px;">#coding=utf-8s = '郝'print s//输出结果为   閮�</span>
<span style="font-size:18px;">********************************</span>
<span style="font-size:18px;">#coding=utf-8s = '郝's = s.decode('utf-8')print s//输出结果为  郝 </span>

三、处理python2中编码问题的原则


明确编码,同类交互,计算机认Unicode(py中大部分情况)



**************************************************************************

 接下来看看python中涉及到字符编码的一些实际操作吧害羞




0 0