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使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
python使用邻接矩阵构造图代码示例
Nov 10 Python
详解python中asyncio模块
Mar 03 Python
Python3实现的Mysql数据库操作封装类
Jun 06 Python
pandas 将list切分后存入DataFrame中的实例
Jul 03 Python
Python实现字符串匹配的KMP算法
Apr 04 Python
Python编程中类与类的关系详解
Aug 08 Python
python监控nginx端口和进程状态
Sep 06 Python
Python imageio读取视频并进行编解码详解
Dec 10 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
python简单的三元一次方程求解实例
Apr 02 Python
解决python打开https出现certificate verify failed的问题
Sep 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 引用是个坏习惯
2010/03/12 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
php防止sql注入的方法详解
2017/02/20 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
js锁屏解屏通过对$.ajax进行封装实现
2014/07/31 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
vue + vuex todolist的实现示例代码
2018/03/09 Javascript
Vue作用域插槽slot-scope实例代码
2018/09/05 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
2020/03/30 Python
新手学python应该下哪个版本
2020/06/11 Python
Bally澳大利亚官网:瑞士奢侈品牌
2018/11/01 全球购物
意大利和国际奢侈品牌购物网站:Suitnegozi.com
2021/01/15 全球购物
秋季运动会广播稿
2014/02/22 职场文书
婚礼司仪主持词
2014/03/14 职场文书
服装设计专业自荐信
2014/06/17 职场文书
求职信的正确写法
2014/07/10 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
学籍证明模板
2015/06/18 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
Python如何利用正则表达式爬取网页信息及图片
2021/04/17 Python