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变量与常量
Jun 02 Python
Django如何实现内容缓存示例详解
Sep 24 Python
Queue 实现生产者消费者模型(实例讲解)
Nov 13 Python
Python实现学生成绩管理系统
Apr 05 Python
基于Django框架利用Ajax实现点赞功能实例代码
Aug 19 Python
对python中的six.moves模块的下载函数urlretrieve详解
Dec 19 Python
python3.6使用tkinter实现弹跳小球游戏
May 09 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
Jan 03 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
Feb 14 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
Apr 03 Python
python 实现Requests发送带cookies的请求
Feb 08 Python
分享3个非常实用的 Python 模块
Mar 03 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 分页函数multi() discuz
2009/06/21 PHP
PHP 获取MySQL数据库里所有表的实现代码
2011/07/13 PHP
php采用curl模仿登录人人网发布动态的方法
2014/11/07 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
thinkPHP简单实现多个子查询语句的方法
2016/12/05 PHP
PHP中“=>
2019/03/01 PHP
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
克隆javascript对象的三个方法小结
2011/01/12 Javascript
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
jQuery验证插件 Validate详解
2014/11/20 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
js canvas实现橡皮擦效果
2018/12/20 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
Python基于select实现的socket服务器
2016/04/13 Python
Python实现随机选择元素功能
2017/09/14 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
python实现批量修改文件名
2020/03/23 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
2020/03/30 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
CSS3使用多列制作瀑布流
2016/05/10 HTML / CSS
业务主管岗位职责
2013/11/20 职场文书
电子商务专业个人的自我评价
2013/12/19 职场文书
送达通知书
2015/04/25 职场文书
写给老师的保证书
2015/05/09 职场文书
太行山上观后感
2015/06/05 职场文书
银行资信证明
2015/06/17 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL