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中的join()函数的用法
Apr 07 Python
基于DATAFRAME中元素的读取与修改方法
Jun 08 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
Python使用requests提交HTTP表单的方法
Dec 26 Python
python调用自定义函数的实例操作
Jun 26 Python
python脚本开机自启的实现方法
Jun 28 Python
基于python的selenium两种文件上传操作实现详解
Sep 19 Python
Django+boostrap 美化admin后台的操作
Mar 11 Python
基于python纯函数实现井字棋游戏
May 27 Python
如何基于Python爬取隐秘的角落评论
Jul 02 Python
python如何写try语句
Jul 14 Python
Pyqt5将多个类组合在一个界面显示的完整示例
Sep 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缩略图生成程式(需要GD库支持)
2007/03/06 PHP
解析thinkphp的左右值无限分类
2013/06/20 PHP
PHP获取MAC地址的具体实例
2013/12/13 PHP
php 判断服务器操作系统的类型
2014/02/17 PHP
PHP中4种常用的抓取网络数据方法
2015/06/04 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
jQuery插件开发详细教程
2014/06/06 Javascript
jQuery实现冻结表头的方法
2015/03/09 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
文件上传的几个示例分享【推荐】
2016/12/16 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
简单介绍Python中的readline()方法的使用
2015/05/24 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
Python 根据数据模板创建shapefile的实现
2019/11/26 Python
基于python+selenium的二次封装的实现
2020/01/06 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
用纯css3实现的图片放大镜特效效果非常不错
2014/09/02 HTML / CSS
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
成教毕业生自我鉴定
2013/10/23 职场文书
质量工程师岗位职责
2013/11/16 职场文书
打造高效课堂实施方案
2014/03/22 职场文书
工商行政管理专业求职书
2014/05/23 职场文书
关于国庆节的演讲稿
2014/09/05 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
pytorch显存一直变大的解决方案
2021/04/08 Python
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js