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 深入理解yield
Sep 06 Python
python使用PIL缩放网络图片并保存的方法
Apr 24 Python
Python运算符重载详解及实例代码
Mar 07 Python
python 列表删除所有指定元素的方法
Apr 19 Python
PyQt5每天必学之切换按钮
Aug 20 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 Python
python 串口读取+存储+输出处理实例
Dec 26 Python
jupyter notebook的安装与使用详解
May 18 Python
Python爬虫之Selenium警告框(弹窗)处理
Dec 04 Python
Python新建项目自动添加介绍和utf-8编码的方法
Dec 26 Python
Django开发RESTful API实现增删改查(入门级)
May 10 Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
Apr 08 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
《魔兽争霸3》重制版究竟重制了什么?玩家:这么糊弄真的好吗?
2020/05/04 魔兽争霸
PHP 设计模式之观察者模式介绍
2012/02/22 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
php实现简单洗牌算法
2013/06/18 PHP
php+ajax实现图片文件上传功能实例
2014/06/17 PHP
typecho插件编写教程(三):保存配置
2015/05/28 PHP
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
Jquery Change与bind事件代码
2011/09/29 Javascript
jQuery实现两款有动画功能的导航菜单代码
2015/09/16 Javascript
jQuery实现区域打印功能代码详解
2016/06/17 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
vue.js中npm安装教程图解
2018/04/10 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
java和js实现的洗牌小程序
2019/09/30 Javascript
用Golang运行JavaScript的实现示例
2019/11/25 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
Django 数据库同步操作技巧详解
2019/07/19 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
Python的形参和实参使用方式
2019/12/24 Python
sklearn+python:线性回归案例
2020/02/24 Python
pycharm中选中一个单词替换所有重复单词的实现方法
2020/11/17 Python
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
应付会计岗位职责
2013/12/12 职场文书
新郎婚宴答谢词
2014/01/19 职场文书
《小熊住山洞》教学反思
2014/02/21 职场文书
教师先进工作者事迹材料
2014/05/01 职场文书
毕业生找工作自荐书
2014/06/30 职场文书
贷款委托书
2014/08/01 职场文书
领导班子自我剖析材料
2014/08/16 职场文书
html+css 实现简易导航栏功能
2021/04/07 HTML / CSS
Python import模块的缓存问题解决方案
2021/06/02 Python