意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

Python中怎么把utf-8格式转换gbk格式

来源:恒创科技 编辑:恒创科技编辑部
2023-12-25 03:35:59
本篇内容介绍了“Python中怎么把utf-8格式转换gbk格式”的有关知识,在实际项目的操作过程或是学习过程中,不少人都会遇到这样的问题,接下来就让小编带大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

  


Python中怎么把utf-8格式转换gbk格式

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

实现代码如下:

defReadFile(filePath,encoding="utf-8"):
withcodecs.open(filePath,"r",encoding)asf:
returnf.read()

defWriteFile(filePath,u,encoding="gbk"):
withcodecs.open(filePath,"w",encoding)asf:
f.write(u)

defUTF8_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'codeccan'tencodecharacteru'\xa0'inposition4813:illegalmultibytesequence

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

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

GB2312:6763个汉字

GBK:21003个汉字

GB18030-2000:27533个汉字

GB18030-2005:70244个汉字

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

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

defUTF8_2_GBK(src,dst):
content=ReadFile(src,encoding="utf-8")
WriteFile(dst,content,encoding="gb18030")

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

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

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

需要修改下WriteFile方法

defWriteFile(filePath,u,encoding="gbk"):
withcodecs.open(filePath,"w")asf:
f.write(u.encode(encoding,errors="ignore"))

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


解码同理。

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

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

defWriteFile(filePath,u,encoding="gbk"):
withcodecs.open(filePath,"wb")asf:
f.write(u.encode(encoding,errors="ignore"))



以上就是关于“Python中怎么把utf-8格式转换gbk格式”的介绍了,感谢各位的阅读,希望这篇文章能帮助大家解决问题。如果想要了解更多知识,欢迎关注群英网络,小编每天都会为大家更新不同的知识。
上一篇: PyMysql连接mysql的具体操作是什么 下一篇: Python中如何实现常见的简单运算,代码是什么