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中正则表达式的用法实例汇总
Aug 18 Python
python实现简单温度转换的方法
Mar 13 Python
python3.5使用tkinter制作记事本
Jun 20 Python
浅述python中argsort()函数的实例用法
Mar 30 Python
python素数筛选法浅析
Mar 19 Python
用python标准库difflib比较两份文件的异同详解
Nov 16 Python
Python中作用域的深入讲解
Dec 10 Python
OpenCV 轮廓检测的实现方法
Jul 03 Python
什么是python的函数体
Jun 19 Python
Python发送邮件实现基础解析
Aug 14 Python
python实现图片素描效果
Sep 26 Python
python 使用pandas读取csv文件的方法
Dec 24 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的dl函数用法实例
2014/11/06 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
php swoft框架实例用法
2020/12/22 PHP
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
Extjs学习笔记之六 面版
2010/01/08 Javascript
图片在浏览器中底部对齐 解决方法之一
2011/11/30 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
location.href用法总结(最主要的)
2013/12/27 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
2016/08/23 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
2016/12/02 Javascript
vue项目优化之通过keep-alive数据缓存的方法
2017/12/11 Javascript
Angular4学习之Angular CLI的安装与使用教程
2018/01/04 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
解决vue项目使用font-awesome,build后路径的问题
2018/09/01 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
2019/10/11 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
13个最常用的Python深度学习库介绍
2017/10/28 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
乡镇干部十八大感言
2014/02/17 职场文书
体育教学随笔感言
2014/02/24 职场文书
公司募捐倡议书
2014/05/14 职场文书
贫困证明书格式及范文
2014/10/15 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书
运动会200米广播稿
2015/08/19 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
Python实现智慧校园自动评教全新版
2021/06/18 Python
Ajax异步刷新功能及简单案例
2021/11/20 Javascript