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数据可视化之画图
Jan 15 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
Jan 15 Python
python如何获取列表中每个元素的下标位置
Jul 01 Python
快速解决docker-py api版本不兼容的问题
Aug 30 Python
Django项目中使用JWT的实现代码
Nov 04 Python
Python hashlib常见摘要算法详解
Jan 13 Python
TensorFlow实现自定义Op方式
Feb 04 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
keras模型保存为tensorflow的二进制模型方式
May 25 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
Jan 26 Python
Django中如何用xlwt生成表格的方法步骤
Jan 31 Python
python实现简单聊天功能
Jul 07 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
利用js调用后台php进行数据处理原码
2006/10/09 PHP
一步一步学习PHP(3) php 函数
2010/02/15 PHP
PHP中如何判断AJAX提交的数据
2012/02/05 PHP
php获取远程图片并下载保存到本地的方法分析
2016/10/08 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
实例化php类时传参的方法分析
2020/06/05 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
jQuery 事件队列调整方法
2009/09/18 Javascript
javascript 时间比较实现代码
2009/10/28 Javascript
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
2010/04/15 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
python求列表交集的方法汇总
2014/11/10 Python
Python扩展内置类型详解
2018/03/26 Python
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
python实现图片横向和纵向拼接
2020/03/05 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
英国男女奢华内衣和泳装购物网站:Figleaves
2017/01/28 全球购物
最新奶茶店创业计划书
2014/01/25 职场文书
产品设计开发计划书
2014/05/07 职场文书
电子信息专业应届生自荐信
2014/06/04 职场文书
低碳环保标语
2014/06/12 职场文书
光学与应用专业毕业生求职信
2014/09/01 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
会计工作态度自我评价
2015/03/06 职场文书
Python之matplotlib绘制饼图
2022/04/13 Python