问题:
使用UE编辑一个xml文本,保存为UTF-8格式。使用java通过JDOM进行解析,提示错误Content is not allowed in prolog。
原因:
经检查,xml文本格式正确,在网上查找,说可能是BOM问题,说很多编辑器保存UTF-8时会在前面加个0xFE之类的。
解决:
UE在保存xml文本时,不要选择UTF-8,改为UTF-8 无BOM。再次执行java代码,程序运行正常。
附网上的解决
对于UTF-8编码的文件来说, BOM头是可有可无的. 如果用dom4J加载含有BOM 头的UTF-8格式的xml文件, 却会抛出"Content is not allowed in prolog"异常.
原来无BOM头的UTF-8文件在经过UltraEdit编辑后, UltraEdit会擅自作主添加一个 BOM头(EditPlus无此问题, 记事本似乎有此问题), 即使去掉UltraEdit中与BOM相 关的所有设置选项也无济于事. 后来在UltraEdit论坛搜索答案, 有人提到11版以后 (含)的UltraEdit"另存为"对话框提供了另存为"UTF-8 - NO BOM"的一个选项.对理 想主义者来说, 这不能算是一个很完美的解决方法:(
进一步研究可以发现, IE/Windows记事本/XmlBuddy等等可正常显示含BOM头的 UTF-8格式文件.那么完美方案应该是让dom4j能正确读入含BOM头的UTF-8文件. 在dom4j的sourceforge论坛上已经有人就此提问, 但是答案中的链接已经失效. 再 次google, 在这里找到了一段代码. |
/