最近在学习Python量化,学习到Python基础,刚好有个字幕格式为xml的文件需要转换为srt字幕文件,于是就优先考虑使用Python来进行转换。首先来看下字符集的划分,下图我通过网络找的。

在处理xml文件并生成srt文件的过程中,Pycharm的控制台出现了如下异常:

但是content的内容是unicode编码,不知道怎么和gbk扯上了关系,对content使用encode()和decode(),用gbk,utf-8,gb2312各种编码解码都没有效果。

一、方法一

在网上查找资料,看到一篇文章关于这个的说法:http://blog.csdn.net/xiaoyi_zhang/article/details/51675099

结论是:

1、‘gbk’ codec can’t encode character:说明是将Unicode字符编码为GBK时候出现了问题,可能是本身Unicode类型的字符中,包含了一些无法转换为GBK编码的一些字符;

2.、gbk无法转换’\xa0’字符,所以在转换前需要将“\xa0”替换掉;使用string.replace(u’\xa0′, u’ ‘);

我在上述代码中使用:

f.write(content.replace(u'\xa0', u'') + '\n')

结果有效,没有报错。

二、方法二

第二个方法就是,在gbk解码时忽略掉不能解码的数据:

f.write(content.encode("gbk", 'ignore').decode("gbk", "ignore") + '\n')

但是总觉得这种方法是在回避问题,后来突发灵感,这是在文件写入的时候报的错误,于是就有了方法三。

三、方法三

因为万恶的windows打开文件默认是以“gbk“编码的,可能造成不识别unicode字符,所以可以在文件打开的时候,给定编码格式。

wf = open(srt_file, 'w', encoding="utf-8")
wf.write(content + '\n')

结果OK! 接下来我们来一起看下转换前和转换后的效果图吧。

转换前的xml格式

转换后的srt格式