Python实现把utf-8格式的文件转换成gbk格式的文件


Posted in Python onJanuary 22, 2015

需求:将utf-8格式的文件转换成gbk格式的文件

实现代码如下:

def ReadFile(filePath,encoding="utf-8"):

    with codecs.open(filePath,"r",encoding) as f:

        return f.read()

 

def WriteFile(filePath,u,encoding="gbk"):

    with codecs.open(filePath,"w",encoding) as f:

        f.write(u)

 

def UTF8_2_GBK(src,dst):

    content = ReadFile(src,encoding="utf-8")

    WriteFile(dst,content,encoding="gbk")

代码讲解:

函数ReadFile的第二个参数指定以utf-8格式的编码方式读取文件,返回的结果content为Unicode然后,在将Unicode以gbk格式写入文件中。

这样就能实现需求。
但是,如果要转换格式的文件中包含有一些字符并不包含在gbk字符集中的话,就会报错,类似如下:

UnicodeEncodeError: 'gbk' codec can't encode character u'\xa0' in position 4813: illegal multibyte sequence

以上的报错信息的意思是:在将Unicode编码成gbk的时候,不能将Unicode u'\xa0'编码成gbk。

这里,我们需要弄清楚gb2312、gbk和gb18030三者之间的关系

GB2312:6763个汉字

GBK:21003个汉字

GB18030-2000:27533个汉字

GB18030-2005:70244个汉字

所以,GBK是GB2312的超集,GB18030是GBK的超集。
理清了关系之后,我们进一步改进下代码:
def UTF8_2_GBK(src,dst):

    content = ReadFile(src,encoding="utf-8")

    WriteFile(dst,content,encoding="gb18030")

运行后,发现没有报错,可以正常运行。

因为,在GB18030字符集中,可以找到u'\xa0'对应的字符。
 此外,还有另外一种实现方案:
需要修改下WriteFile方法

def WriteFile(filePath,u,encoding="gbk"):

    with codecs.open(filePath,"w") as f:

        f.write(u.encode(encoding,errors="ignore"))

这里,我们将Unicode编码(encode)成gbk格式,但是注意encode函数的第二个参数,我们赋值"ignore",表示在编码的时候,忽略掉那些无法编码的字符,解码同理。

但是,当我们执行后,发现可以成功的将utf-8格式的文件修改成了ansi格式。但,另外发现生成的文件中,每个一行都有一行空行。

这里,可以指定以二进制流的形式写文件,修改后的代码如下:

def WriteFile(filePath,u,encoding="gbk"):

    with codecs.open(filePath,"wb") as f:

        f.write(u.encode(encoding,errors="ignore"))
Python 相关文章推荐
简单的Python2.7编程初学经验总结
Apr 01 Python
Python的设计模式编程入门指南
Apr 02 Python
全面解析Python的While循环语句的使用方法
Oct 13 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
Sep 19 Python
Python将文本去空格并保存到txt文件中的实例
Jul 24 Python
python 定时器,实现每天凌晨3点执行的方法
Feb 20 Python
Python 实现Numpy中找出array中最大值所对应的行和列
Nov 26 Python
python基于TCP实现的文件下载器功能案例
Dec 10 Python
Python日志:自定义输出字段 json格式输出方式
Apr 27 Python
Python爬虫HTPP请求方法有哪些
Jun 03 Python
pandas分批读取大数据集教程
Jun 06 Python
Django集成富文本编辑器summernote的实现步骤
May 31 Python
python中实现php的var_dump函数功能
Jan 21 #Python
Python实现获取网站PR及百度权重
Jan 21 #Python
Python实现抓取页面上链接的简单爬虫分享
Jan 21 #Python
Python中多线程及程序锁浅析
Jan 21 #Python
Python实现的多线程端口扫描工具分享
Jan 21 #Python
Python中的pprint折腾记
Jan 21 #Python
通过C++学习Python
Jan 20 #Python
You might like
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
实用函数9
2007/11/08 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
Drupal7中常用的数据库操作实例
2014/03/02 PHP
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
js中string转int把String类型转化成int类型
2014/08/13 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
2018/01/31 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
微信小程序可滑动月日历组件使用详解
2019/10/21 Javascript
ES6 十大特性简介
2020/12/09 Javascript
Python语言的12个基础知识点小结
2014/07/10 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
学python爬虫能做什么
2020/07/29 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
美国高档帽子网上商店:Hats.com
2018/08/09 全球购物
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
班级安全教育实施方案
2014/02/23 职场文书
哈弗商学院毕业生求职信
2014/02/26 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
单位个人查摆问题及整改措施
2014/10/28 职场文书
运动会5000米加油稿
2015/07/21 职场文书
python for循环赋值问题
2021/06/03 Python
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript