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实现ftp客户端示例分享
Feb 17 Python
Windows下安装python2.7及科学计算套装
Mar 05 Python
Python实现把xml或xsl转换为html格式
Apr 08 Python
python使用正则表达式的search()函数实现指定位置搜索功能
Nov 10 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
Nov 30 Python
Python装饰器用法实例分析
Jan 14 Python
对python周期性定时器的示例详解
Feb 19 Python
基于python生成器封装的协程类
Mar 20 Python
python绘制地震散点图
Jun 18 Python
python的reverse函数翻转结果为None的问题
May 11 Python
Python填充任意颜色,不同算法时间差异分析说明
May 16 Python
python 生成正态分布数据,并绘图和解析
Dec 21 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和ACCESS写聊天室(一)
2006/10/09 PHP
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
2014/08/18 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
JS代码格式化和语法着色V2
2006/10/14 Javascript
用javascript实现自定义标签
2007/05/08 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
2014/04/07 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
js实现精美的图片跟随鼠标效果实例
2015/05/16 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
vue实现简单实时汇率计算功能
2017/01/15 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
vue2过滤器模糊查询方法
2018/09/16 Javascript
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
JS实现网页端猜数字小游戏
2020/03/06 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
pandas筛选某列出现编码错误的解决方法
2018/11/07 Python
python使用hdfs3模块对hdfs进行操作详解
2020/06/06 Python
python之随机数函数的实现示例
2020/12/30 Python
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
Speedo速比涛中国官方网站:全球领先泳装运动品牌
2018/04/24 全球购物
教师辞职报告范文
2014/01/20 职场文书
采购部经理岗位职责
2014/02/10 职场文书
搞笑的获奖感言
2014/08/16 职场文书
民事撤诉申请书范本
2015/05/18 职场文书
2019邀请函格式及范文
2019/05/20 职场文书
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript