VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • Python:将utf-8格式的文件转换成gbk格式的文件

需求:将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"))

相关教程