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脚本暴力破解栅栏密码
Oct 19 Python
Python编写简单的HTML页面合并脚本
Jul 11 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
Sep 25 Python
对numpy中轴与维度的理解
Apr 18 Python
python模块smtplib实现纯文本邮件发送功能
May 22 Python
将tensorflow的ckpt模型存储为npy的实例
Jul 09 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
Nov 07 Python
手把手教你如何安装Pycharm(详细图文教程)
Nov 28 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
Nov 29 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
Apr 17 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 Python
Python django中如何使用restful框架
Jun 23 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的curl开启问题探讨
2014/04/08 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
php制作动态随机验证码
2015/02/12 PHP
PHP模板引擎Smarty中的保留变量用法分析
2016/04/11 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
javascript 变量作用域 代码分析
2009/06/26 Javascript
JS去除右边逗号的简单方法
2013/07/03 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
JQuery鼠标移到小图显示大图效果的方法
2015/06/10 Javascript
Bootstrap每天必学之下拉菜单
2015/11/25 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
jQuery+PHP+Mysql实现抽奖程序
2020/04/12 jQuery
JavaScript手风琴页面制作
2017/05/17 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
python函数形参用法实例分析
2015/08/04 Python
python多线程方式执行多个bat代码
2016/06/07 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
Python中的Cookie模块如何使用
2020/06/04 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
管理学专业个人求职信范文
2013/09/21 职场文书
满月酒答谢词
2014/01/14 职场文书
毕业生大学生活自我总结
2014/01/31 职场文书
征婚广告词
2014/03/17 职场文书
门卫岗位职责说明书
2014/08/18 职场文书
2015年司机工作总结
2015/04/23 职场文书
运动会100米广播稿
2015/08/19 职场文书