python 设置文件编码格式的实现方法


Posted in Python onDecember 21, 2017

如果要在python2的py文件里面写中文,则必须要添加一行声明文件编码的注释,否则python2会默认使用ASCII编码。(python3已经没有这个问题了,python3默认的文件编码是UTF-8)

必须将编码注释放在第一行或者第二行,一般来说,Python文件的前两行要这样写:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

其中第一行是指定python解释器,第二行是指定python文件编码方式,设置编码方式有以下可选的方法

1. 带等号的设置方法:

#!/usr/bin/python
# coding=<encoding name>

2. 最常见的,带冒号的(大多数编辑器都可以正确识别的):

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

3. vim的:

#!/usr/bin/python
# vim: set fileencoding=<encoding name> :

设置头部的编码声明有以下几个作用:

如果代码中有中文注释,就需要此声明

比较高级的编辑器(比如我的emacs),会根据头部声明,将此作为代码文件的格式。

程序会通过头部声明,解码初始化 u”人生苦短”,这样的unicode对象,(所以头部声明和代码的存储格式要一致)

设置默认解码格式

import sys  #引用sys模块进来,并不是进行sys的第一次加载 
reload(sys) #重新加载sys 
sys.setdefaultencoding('utf8') ##调用setdefaultencoding函数

这里特别注意的是第二行的reload(sys),这个一定不能少,少了的话就不能正确运行。那么为什么要重新加载,而直接引用过来则不能调用该函数呢?因为setdefaultencoding函数在被系统调用后被删除了,所以通过import引用进来时其实已经没有了,所以必须reload一次sys模块,这样setdefaultencoding才会为可用,才能在代码里修改解释器当前的字符编码。

在python安装目录的Lib文件夹下,有一个叫site.py的文件,在里面可以找到main() ?> setencoding()?>sys.setdefaultencoding(encoding),因为这个site.py每次启动python解释器时会自动加载,所以main函数每次都会被执行,setdefaultencoding函数一出来就已经被删除了。

关于 sys.defaultencoding,这个在解码没有明确指明解码方式的时候使用。比如我有如下代码:

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
s = '中文' # 注意这里的 str 是 str 类型的,而不是 unicode 
s.encode('gb18030')

这句代码将 s 重新编码为 gb18030 的格式,即进行 unicode -> str 的转换。因为 s 本身就是 str 类型的,因此

Python 会自动的先将 s 解码为 unicode ,然后再编码成 gb18030。因为解码是python自动进行的,我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。很多情况下 sys.defaultencoding 是

ANSCII,如果 s 不是这个类型就会出错。拿上面的情况来说,我的 sys.defaultencoding 是 anscii,而 s 的编码方式和文件的编码方式一致,是 utf8 的,所以出错了:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 
0: ordinal not in range(128)

对于这种情况,我们有两种方法来改正错误:

一是明确的指示出 s 的编码方式

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
s = '中文' 
s.decode('utf-8').encode('gb18030')

二是更改 sys.defaultencoding 为文件的编码方式

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
import sys 
reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入 
sys.setdefaultencoding('utf-8') 
str = '中文' 
str.encode('gb18030')

以上这篇python 设置文件编码格式的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用设计模式中的责任链模式与迭代器模式的示例
Mar 02 Python
python算法表示概念扫盲教程
Apr 13 Python
Python Socket使用实例
Dec 18 Python
python中从str中提取元素到list以及将list转换为str的方法
Jun 26 Python
python实时获取外部程序输出结果的方法
Jan 12 Python
解决python 文本过滤和清理问题
Aug 28 Python
线程安全及Python中的GIL原理分析
Oct 29 Python
Python自动化测试笔试面试题精选
Mar 12 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
Mar 18 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 Python
Django Paginator分页器的使用示例
Jun 23 Python
Python+OpenCV人脸检测原理及示例详解
Oct 19 #Python
Python 查看文件的编码格式方法
Dec 21 #Python
python利用OpenCV2实现人脸检测
Apr 16 #Python
Python判断文件和字符串编码类型的实例
Dec 21 #Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 #Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
Dec 21 #Python
基于Python的文件类型和字符串详解
Dec 21 #Python
You might like
php和javascript之间变量的传递实现代码
2012/12/19 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
基于jquery的15款幻灯片插件
2011/04/10 Javascript
javascript 闭包
2011/09/15 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
一个封装js代码-----展开收起效果示例
2013/07/03 Javascript
javascript函数定义的几种区别小结
2014/01/06 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
js打造数组转json函数
2015/01/14 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
python计算一个序列的平均值的方法
2015/07/11 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
2018/05/31 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
《盘古开天地》教学反思
2014/02/28 职场文书
捐款活动总结
2014/08/27 职场文书
中学生检讨书范文
2014/11/03 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书