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下载指定页面上图片的方法
May 12 Python
Windows下Python2与Python3两个版本共存的方法详解
Feb 12 Python
Pyspider中给爬虫伪造随机请求头的实例
May 07 Python
int在python中的含义以及用法
Jun 27 Python
Python实现最大子序和的方法示例
Jul 05 Python
django 数据库连接模块解析及简单长连接改造方法
Aug 29 Python
python tkinter控件布局项目实例
Nov 04 Python
将python2.7添加进64位系统的注册表方式
Nov 20 Python
浅谈python3 构造函数和析构函数
Mar 12 Python
Pygame的程序开始示例代码
May 07 Python
通过实例简单了解Python sys.argv[]使用方法
Aug 04 Python
Python基础 括号()[]{}的详解
Nov 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
php && 逻辑与运算符使用说明
2010/03/04 PHP
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
2011/08/08 PHP
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
php制作简单模版引擎
2016/04/07 PHP
php 多文件上传的实现实例
2016/10/23 PHP
PDO实现学生管理系统
2020/03/21 PHP
jquery构造器的实现代码小结
2011/05/16 Javascript
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
js读取配置文件自写
2014/02/11 Javascript
自制微信公众号一键排版工具
2016/09/22 Javascript
你真的了解BOM中的history对象吗
2017/02/13 Javascript
js仿新浪微博消息发布功能
2017/02/17 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
vue-router为激活的路由设置样式操作
2020/07/18 Javascript
JavaScript判断数据类型有几种方法及区别介绍
2020/09/02 Javascript
python输出指定月份日历的方法
2015/04/23 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
django-初始配置(纯手写)详解
2019/07/30 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
为什么Runtime.exec(“ls”)没有任何输出?
2014/10/03 面试题
国际政治个人自荐信范文
2013/11/26 职场文书
个人素质的自我评价分享
2013/12/16 职场文书
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
低碳日宣传活动总结
2014/07/09 职场文书
大学生创业计划书
2014/08/14 职场文书
2015年度内部审计工作总结
2015/05/20 职场文书
学校趣味运动会开幕词
2016/03/04 职场文书
Python图片检索之以图搜图
2021/05/31 Python