Python将utf-8格式文件转换成gbk格式的简单示例

Python将utf-8格式文件转换成gbk格式的简单示例,第1张

概述Python将utf-8格式文件转换成gbk格式的简单示例 对python这个高级语言感兴趣的小伙伴,下面一起跟随内存溢出 jb51.cc的小编两巴掌来看看吧!

需求:将utf-8格式的文件转换成gbk格式的文件

实现代码如下:

# @param Python:将utf-8格式的文件转换成gbk格式的文件# @author 内存溢出 jb51.cc|jb51.cc 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")# End www.jb51.cc

代码讲解:

函数Readfile的第二个参数指定以utf-8格式的编码方式读取文件,返回的结果content为Unicode

然后,在将Unicode以gbk格式写入文件中。

这样就能实现需求。

但是,如果要转换格式的文件中包含有一些字符并不包含在gbk字符集中的话,就会报错,类似如下:

UnicodeEncodeError: 'gbk' codec can't encode character u'\xa0' in position 4813: illegal multibyte sequence# End www.jb51.cc

以上的报错信息的意思是:在将Unicode编码成gbk的时候,不能将Unicode u'\xa0'编码成gbk。

这里,我们需要弄清楚gb2312、gbk和gb18030三者之间的关系

GB2312:6763个汉字

GBK:21003个汉字

GB18030-2000:27533个汉字

GB18030-2005:70244个汉字

所以,GBK是GB2312的超集,GB18030是GBK的超集。

理清了关系之后,我们进一步改进下代码:

# @param Python:将utf-8格式的文件转换成gbk格式的文件# @author 内存溢出 jb51.cc|jb51.cc def UTF8_2_GBK(src,enCoding="gb18030")# End www.jb51.cc

运行后,发现没有报错,可以正常运行。

因为,在GB18030字符集中,可以找到u'\xa0'对应的字符。

此外,还有另外一种实现方案:

需要修改下Writefile方法

# @param Python:将utf-8格式的文件转换成gbk格式的文件# @author 内存溢出 jb51.cc|jb51.cc def Writefile(filePath,"w") as f:        f.write(u.encode(enCoding,errors="ignore"))# End www.jb51.cc

这里,我们将Unicode编码(encode)成gbk格式,但是注意encode函数的第二个参数,我们赋值"ignore",表示在编码的时候,忽略掉那些无法编码的字符,

 

解码同理。

但是,当我们执行后,发现可以成功的将utf-8格式的文件修改成了ansi格式。但,另外发现生成的文件中,每个一行都有一行空行。

这里,可以指定以二进制流的形式写文件,修改后的代码如下:

# @param Python:将utf-8格式的文件转换成gbk格式的文件# @author 内存溢出 jb51.cc|jb51.cc def Writefile(filePath,"wb") as f:        f.write(u.encode(enCoding,errors="ignore"))# End www.jb51.cc
总结

以上是内存溢出为你收集整理的Python将utf-8格式文件转换成gbk格式的简单示例全部内容,希望文章能够帮你解决Python将utf-8格式文件转换成gbk格式的简单示例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1200161.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存