2021年10月28日星期四

Blogger导入XML文件出错分析

  这些天遇到一个问题,通过Blogger导入一个XML格式的文件,一直没有导入成功,我分析原因属于XML格式转换的问题,折腾了好几天才找到原因,因此记录一下整个过程。

  在使用Wordpress转化网站到Blogger的时候,由于之前的转化工具Google Blog Converters已经歇菜,因此使用了一个WordPress插件“Export to Blogger”来解决问题,大部分内容导出到Google Blogger都没问题,但奇怪的是有一个转化好的XML文档始终都无法导入到Blogger中,不知道是怎么回事。

  经过了多次尝试和分析,我确认是文档中的某个字符转化错误导致无法导入,然而文档长达2M大小,很难从中找到具体是哪个字符出错,因此就暂时作罢。

  后来我想到了一个思路,利用XML Validator这种格式检查工具来检测XML文件,但是找了好几个检查工具,都只支持最大64k的文件大小,无法检测大文件,后来,我双击XML文件发现,IE浏览器会对正确的XML文件进行格式渲染,而对错误的XML文件直接显示源代码,这也就意味着我可以把IE当成一个XML验证器。

  于是开工,先把XML文件分成两半,用IE打开,一半成功渲染,另一半不成功,因此确认问题在某一半,依次循环操作,逐次切割,最终将文件切割到了几个字符,但我依然没有看到有什么异常字符。

  最终切割到只有1、2个字符的时候,我发现了问题所在,原来这2个字符中间居然有一个隐藏字符,使用普通文本编辑器根本看不到这个字符,我使用WinHEX来查看,原来这个隐藏字符是ASCII码1C,将这个隐藏字符删除后,XML文件渲染终于成功了。

  实际上,ASCII码1C到1F都是隐藏看不见的字符,如果这样的字符存在XML文件之中,XML格式不会报错,但就是无法导入到Google Blogger中,导入过程也不报错,就是无法导入成功,将这些隐藏字符删除后,才能正确地导入。

  可惜的是,一般编辑器都不支持搜索这种隐藏字符,估计要换一个比较专业的编辑器才能看到并搜索这种隐藏字符。