python中utf-8和gbk编码格式_Python:将utf-8格式的文件转换成gbk格式的文件|python3教程|python入门|python教程...

博客围绕将UTF-8格式文件转换成GBK格式文件的需求展开。先给出实现代码,讲解其原理是先以UTF-8读取文件得到Unicode,再以GBK写入。当文件含GBK字符集外字符会报错,随后介绍GB2312、GBK和GB18030关系,改进代码用GB18030编码,还给出修改WriteFile方法的另一种方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://www.xin3721.com/eschool/python.html

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

实现代码如下:

1

2

3

4

5

6

7

8

9

10

11

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字符集中的话,就会报错,类似如下:

1

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的超集。

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

1

2

3

def UTF8_2_GBK(src,dst):

content= ReadFile(src,encoding="utf-8")

WriteFile(dst,content,encoding="gb18030")

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

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

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

需要修改下WriteFile方法

1

2

3

def WriteFile(filePath,u,encoding="gbk"):

with codecs.open(filePath,"w") as f:

f.write(u.encode(encoding,errors="ignore"))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值