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的判断语句模拟三目运算
Apr 24 Python
Python批量转换文件编码格式
May 17 Python
python实现FTP服务器服务的方法
Apr 11 Python
Windows 7下Python Web环境搭建图文教程
Mar 20 Python
python 实现一次性在文件中写入多行的方法
Jan 28 Python
linux环境中没有网络怎么下载python
Jul 07 Python
python Elasticsearch索引建立和数据的上传详解
Aug 04 Python
Python搭建代理IP池实现接口设置与整体调度
Oct 27 Python
Python多线程:主线程等待所有子线程结束代码
Apr 25 Python
python 实现图片裁剪小工具
Feb 02 Python
Python爬虫分析微博热搜关键词的实现代码
Feb 22 Python
Python开发简易五子棋小游戏
May 02 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中文件下载功能实现超详细流程分析
2012/06/13 PHP
PHP中使用file_get_contents post数据代码例子
2015/02/13 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
Yii2语言国际化自动配置详解
2018/08/22 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
Javascript客户端将指定区域导出到Word、Excel的代码
2008/10/22 Javascript
ext中store.load跟store.reload的区别示例介绍
2014/06/17 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
高性能JavaScript模板引擎实现原理详解
2015/02/05 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
在vue中给列表中的奇数行添加class的实现方法
2018/09/05 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
详解微信小程序工程化探索之webpack实战
2020/04/20 Javascript
原生js实现简单轮播图
2020/10/26 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
在Python中进行自动化单元测试的教程
2015/04/15 Python
python通过ftplib登录到ftp服务器的方法
2015/05/08 Python
怎么使用pipenv管理你的python项目
2018/03/12 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
Python非单向递归函数如何返回全部结果
2020/12/18 Python
详解Python Celery和RabbitMQ实战教程
2021/01/20 Python
艺术应用与设计个人的自我评价
2013/11/23 职场文书
招聘与培训专员岗位职责
2014/01/30 职场文书
党员对照检查材料思想汇报
2014/09/16 职场文书
2016元旦文艺汇演主持词(开场白+结束语)
2015/12/03 职场文书
技术转让协议书
2016/03/19 职场文书
Python并发编程实例教程之线程的玩法
2021/06/20 Python
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
2022/05/25 SQL Server