《python-utf-8格式的文件转换gbk格式.docx》由会员分享,可在线阅读,更多相关《python-utf-8格式的文件转换gbk格式.docx(2页珍藏版)》请在优知文库上搜索。
1、需求:将utf-8格式的文件转换成gbk格式的文件实现代码如F:defKeadFiIe(fiIePath,CnCOdingutf-8):withcodecs,open(fiIePath1r*,encoding)asf:returnf.readOdefWriteFiIe(fiIePath,u,encodinggbk):withcodecs.pen(fiIePath1w*,encoding)asf:f.write(u)defUTF8_2_GBK(SrC,dst):content=ReadFiIe(SrC,encoding=IHf-8”)WriteFi1.e(dst,content,encoding
2、=gbk)心代码讲解:函数ReadFiIe的第二个参数指定以U1.1.8格式的编码方式读取文件,返回的结果content为Unicode然后,在将UniCode以gbk格式写入文件中。这样就能实现需求.但是,如果要转换格式的件中包含有一些字符并不包含在gbk字符集中的话,就会报错,类似如卜丁UnicodeEncodeError:gbkcodeccan,tencodecharacteru,xa,inposition4813:i1.1.ega1.Bu1.tibytesequence以上的报钳信息的意思是:在将UniCode编码成gbk的时候,不能将UniCodeuxa,编码成Rbke这里,我们需要
3、弄清地gb2312、gbk和gb1.8030三者之间的关系GB2312:6763个汉字GBK:21003个汉字GB18030-2000:27533个汉字GB18030-2005:70244个汉字所以,GBK是GB2312的超集,GB18030是GBK的超集.理清了关系之后,我们进一步改进下代码:defUTF8_2GBK(src,dst):content=ReadFiIe(src,encoding=-utf-8)WriteFiIe(dst,content,CnCeding=gb18030)运行后,发现没有报错,可以正常运行。因为,在GB18030字符集中,可以找到u,xa,对应的字符。此外,还有
4、另外一种实现方案:需要修改下WriIeFiIe方法defWriteFi1.e(fiIePath,u,encoding=gbk):withcodecs.open(fiIePath1w*)asf:.wri1.e(u.encode(encoding,errors=*ignore*)这里,我们将UniCOde编码(encode)成gbk格式,但是注意encode函数的笫二个参数,我们赋值ignore,表示在编码的时候,忽略掉那些无法编码的字符,解码同理。但是,当我们执行后,发现可以成功的将Utf-8格式的文件修改成了ansi格式。但,另外发现生成的文件中,每个行都有一行空行。这里,可以指定以二进制流的形式与文件,修改后的代码如下:1.efWriteFiIe(fiIePath,u,encoding=gbk):withcodecs.open(fiIePath1,wb,)asf:f.write(u.encode(encoding,errors=*ignore*)