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 16 Python
Pthon批量处理将pdb文件生成dssp文件
Jun 21 Python
简介Django中内置的一些中间件
Jul 24 Python
基于Django模板中的数字自增(详解)
Sep 05 Python
Python实现的归并排序算法示例
Nov 21 Python
快速查询Python文档方法分享
Dec 27 Python
Python通过属性手段实现只允许调用一次的示例讲解
Apr 21 Python
python监控nginx端口和进程状态
Sep 06 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
Feb 07 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
Feb 11 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
May 12 Python
Python批量解压&压缩文件夹的示例代码
Apr 04 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 ajax 静态分页过程形式
2011/09/02 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
jQuery使用手册之 事件处理
2007/03/24 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
JavaScript排序算法之希尔排序的2个实例
2014/04/04 Javascript
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
详解RequireJs官方使用教程
2017/10/31 Javascript
vue2.0 axios跨域并渲染的问题解决方法
2018/03/08 Javascript
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
vue移动端弹框组件的实例
2018/09/25 Javascript
Vue中的vue-resource示例详解
2018/11/02 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
js实现验证码干扰(动态)
2021/02/23 Javascript
python将人民币转换大写的脚本代码
2013/02/10 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
PyQt弹出式对话框的常用方法及标准按钮类型
2019/02/27 Python
Django 路由层URLconf的实现
2019/12/30 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
帕克纽约:PARKER NY
2018/12/09 全球购物
C#基础面试题
2016/10/17 面试题
《小草和大树》教学反思
2014/02/16 职场文书
元旦晚会主持词
2014/03/24 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
小学五一劳动节活动总结
2015/02/09 职场文书
员工旷工检讨书
2015/08/15 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书
电脑无法安装Windows 11怎么办?无法安装Win11的解决方法
2021/11/21 数码科技