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编写基于DHT协议的BT资源爬虫
Mar 19 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
Jun 14 Python
Python编程中装饰器的使用示例解析
Jun 20 Python
python3使用matplotlib绘制散点图
Mar 19 Python
Python 3 实现定义跨模块的全局变量和使用教程
Jul 07 Python
pytorch方法测试——激活函数(ReLU)详解
Jan 15 Python
pytorch模型存储的2种实现方法
Feb 14 Python
pycharm sciview的图片另存为操作
Jun 01 Python
Python接收手机短信的代码整理
Aug 02 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 Python
jupyter notebook指定启动目录的方法
Mar 02 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 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
第八节 访问方式 [8]
2006/10/09 PHP
7个超级实用的PHP代码片段
2011/07/11 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
2015/03/25 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
jQuery实现表单提交时判断的方法
2014/12/13 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
2017/03/08 Javascript
vue实现消息的无缝滚动效果的示例代码
2017/12/05 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
[02:46]完美世界DOTA2联赛PWL DAY4集锦
2020/11/03 DOTA
Python3读取zip文件信息的方法
2015/05/22 Python
Django实现快速分页的方法实例
2017/10/22 Python
全面分析Python的优点和缺点
2018/02/07 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
python matplotlib imshow热图坐标替换/映射实例
2020/03/14 Python
用python写爬虫简单吗
2020/07/28 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
分公司经理岗位职责
2013/11/11 职场文书
县优秀教师事迹材料
2014/01/31 职场文书
美容院店长岗位职责
2014/04/08 职场文书
庆七一宣传标语
2014/10/08 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
房地产置业顾问岗位职责
2015/04/11 职场文书