最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Python实现把utf-8格式的文件转换成gbk格式的文件

来源:动视网 责编:小采 时间:2020-11-27 14:40:16
文档

Python实现把utf-8格式的文件转换成gbk格式的文件

Python实现把utf-8格式的文件转换成gbk格式的文件:需求:将utf-8格式的文件转换成gbk格式的文件 实现代码如下: 代码如下: def ReadFile(filePath,encoding=utf-8): with codecs.open(filePath,r,encoding) as f: return f.read() def WriteFile(filePat
推荐度:
导读Python实现把utf-8格式的文件转换成gbk格式的文件:需求:将utf-8格式的文件转换成gbk格式的文件 实现代码如下: 代码如下: def ReadFile(filePath,encoding=utf-8): with codecs.open(filePath,r,encoding) as f: return f.read() def WriteFile(filePat


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

实现代码如下:

代码如下:


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

代码如下:


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的超集。
理清了关系之后,我们进一步改进下代码:

代码如下:


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

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

因为,在GB18030字符集中,可以找到u'\xa0'对应的字符。
此外,还有另外一种实现方案:
需要修改下WriteFile方法

代码如下:


def WriteFile(filePath,u,encoding="gbk"):
with codecs.open(filePath,"w") as f:
f.write(u.encode(encoding,errors="ignore"))


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

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

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

代码如下:


def WriteFile(filePath,u,encoding="gbk"):
with codecs.open(filePath,"wb") as f:
f.write(u.encode(encoding,errors="ignore"))

文档

Python实现把utf-8格式的文件转换成gbk格式的文件

Python实现把utf-8格式的文件转换成gbk格式的文件:需求:将utf-8格式的文件转换成gbk格式的文件 实现代码如下: 代码如下: def ReadFile(filePath,encoding=utf-8): with codecs.open(filePath,r,encoding) as f: return f.read() def WriteFile(filePat
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top