编码相关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中涉及到字符编码的一些实际操作吧
- 编码相关2 python编码 之 基本原理
- python 相关编码
- Python编码相关问题
- Python编码相关文章推荐
- python 编码相关问题总结
- python编码之pythonic
- python之脚本编码
- Python之编码规范
- python学习之 编码
- python之字符编码
- python学习之编码
- 视频编码的基本原理
- 视频编码的基本原理
- 视频编码的基本原理
- 视频压缩编码基本原理
- 视频压缩编码的基本原理
- 视频编码基本原理
- 编码相关
- mybatis配置文件中代码的重用
- 第八周—三色球
- 第九周项目3---(1)建立稀疏矩阵三元组表示的算法库
- 相加和最大值
- 杂花生树(十四)
- 编码相关2 python编码 之 基本原理
- C语言实验——从大到小输出a、b、c(选择结构)
- js日期选择控件layDate api手册
- Notificaiton状态通知栏
- linux系统编程之管道(二):管道读写规则和Pipe Capacity、PIPE_BUF
- androidStudio临时文件清理
- PyQt4+Anaconda3+PyCharm配置
- C语言实验——三个数排序
- 删除 GitHub 远程仓库中 master 分支的多个提交