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 相关文章推荐
Python中使用第三方库xlrd来写入Excel文件示例
Apr 05 Python
Python中的XML库4Suite Server的介绍
Apr 14 Python
Python中利用sorted()函数排序的简单教程
Apr 27 Python
python实现百万答题自动百度搜索答案
Jan 16 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
Jul 18 Python
Selenium元素的常用操作方法分析
Aug 10 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
Python实现查找二叉搜索树第k大的节点功能示例
Jan 24 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
python实现扑克牌交互式界面发牌程序
Apr 22 Python
Python接口测试文件上传实例解析
May 22 Python
python中有帮助函数吗
Jun 19 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
php写入、删除与复制文件的方法
2015/06/20 PHP
php readfile下载大文件失败的解决方法
2017/05/22 PHP
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2012/01/21 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
2015/11/18 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
JavaScript实战之菜单特效
2016/08/16 Javascript
JS多物体实现缓冲运动效果示例
2016/12/20 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
2017/12/01 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
vue-router启用history模式下的开发及非根目录部署方法
2018/12/23 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
VUE : vue-cli中去掉路由中的井号#操作
2020/09/04 Javascript
解决vant的Toast组件时提示not defined的问题
2020/11/11 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
Python基于动态规划算法计算单词距离
2015/07/25 Python
Python+OpenCV人脸检测原理及示例详解
2020/10/19 Python
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
Python实现的企业粉丝抽奖功能示例
2019/07/26 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
CSS3感应鼠标的背景闪烁和图片缩放动画效果
2014/05/14 HTML / CSS
计算机学生的自我评价分享
2014/02/18 职场文书
理工大学毕业生自荐信范文
2014/02/22 职场文书
法制宣传教育方案
2014/05/09 职场文书
同学聚会策划方案
2014/06/06 职场文书
开发房地产协议书
2014/09/14 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
Redis Cluster 集群搭建你会吗
2021/08/04 Redis