Python将utf-8格式文件转换成gbk格式的解决办法
对python这个高级语言对此感兴趣的朋友,看看idc笔记做
这篇文章主要为大家详细介绍了Python将utf-8格式文件转换成gbk格式的简单示例,具有一定的参考价值,可以用来参考一下。
对python这个高级语言对此感兴趣的朋友,看看idc笔记做的技术笔记!需求:将utf-8格式的文件转换成gbk格式的文件
实现代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <code class = "python" > # @param Python:将utf-8格式的文件转换成gbk格式的文件 # @author php教程|512pic.com 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_512pic_com </code> |
代码讲解:
函数ReadFile的第二个参数指定以utf-8格式的编码方式读取文件,返回的结果content为Unicode
然后,在将Unicode以gbk格式写入文件中。
这样就能实现需求。
但是,如果要转换格式的文件中包含有一些字符并不包含在gbk字符集中的话,就会报错,类似如下:
1 2 3 4 5 | <code class = "bash" > UnicodeEncodeError: 'gbk' codec can 't encode character u' \xa0' in position 4813: illegal multibyte sequence # End www_512pic_com </code> |
以上的报错信息的意思是:在将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 4 5 6 7 8 9 10 | <code class = "python" > # @param Python:将utf-8格式的文件转换成gbk格式的文件 # @author php教程|512pic.com def UTF8_2_GBK(src,dst): content = ReadFile(src,encoding= "utf-8" ) WriteFile(dst,content,encoding= "gb18030" ) # End www_512pic_com </code> |
运行后,发现没有报错,可以正常运行。
因为,在GB18030字符集中,可以找到u'\xa0'对应的字符。
此外,还有另外一种实现方案:
需要修改下WriteFile方法
1 2 3 4 5 6 7 8 9 10 | <code class = "python" > # @param Python:将utf-8格式的文件转换成gbk格式的文件 # @author php教程|512pic.com def WriteFile(filePath,u,encoding= "gbk" ): with codecs.open(filePath, "w" ) as f: f.write(u.encode(encoding,errors= "ignore" )) # End www_512pic_com </code> |
这里,我们将Unicode编码(encode)成gbk格式,但是注意encode函数的第二个参数,我们赋值"ignore",表示在编码的时候,忽略掉那些无法编码的字符,
解码同理。
但是,当我们执行后,发现可以成功的将utf-8格式的文件修改成了ansi格式。但,另外发现生成的文件中,每个一行都有一行空行。
这里,可以指定以二进制流的形式写文件,修改后的代码如下:
1 2 3 4 5 6 7 8 9 10 | <code class = "python" > # @param Python:将utf-8格式的文件转换成gbk格式的文件 # @author php教程|512pic.com def WriteFile(filePath,u,encoding= "gbk" ): with codecs.open(filePath, "wb" ) as f: f.write(u.encode(encoding,errors= "ignore" )) # End www_512pic_com </code> |
注:关于Python将utf-8格式文件转换成gbk格式的简单示例的内容就先介绍到这里,更多相关文章的可以留意