sax解析xml运⾏出现错误l.sax.SAXParseException:
C。。。
xml文件怎么打开sax解析xml运⾏出现错误l.sax.SAXParseException: Content is not allowed in prolog.
原因及其解决办法:
该xml是UTF-8编码的,如果该⽂件通过UltraEdit编辑后,会在⽆BOM头的UTF-8⽂件中加⼊BOM,但是DOM4j不认这个BOM(dom4j1.3),解决的办法可以通过升
级dom4j到1.6解决
Unicode规范中有⼀个BOM的概念。BOM——Byte Order Mark,就是字节序标记。在这⾥到⼀段关于BOM的说明:
在UCS 编码中有⼀个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。⽽FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字
符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"⼜被称作BOM。
UTF-8不需要BOM来表明字节顺序,但可以⽤BOM来表明编码⽅式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
Windows就是使⽤BOM来标记⽂本⽂件的编码⽅式的。
把xml 动⼿敲⼀遍,删除不该有的间隔符:⽐如空格,制表符(TAB)等。
异常提⽰是Content is not allowed in prolog.意思就是说⽂件开头的时候有问题。
怎么去掉BOM:
⾸先windows⾃带的记事本会在保存UTF-8编码的⽂件时不管是否含有BOM⼀律加上BOM,所以千万别⽤记事本。⽐较新版本的UltraEdit(以下简称UE,⼤家都是这么叫的)都对BOM⽀持⽐较好,所以
推荐使⽤新版本的UE来解决这个问题。我⽤的版本是UltraEdit-32 11.00a+中⽂版。⾸先打开UE,选择菜单栏“⾼级”-“配置”,出现⼀个选项卡窗⼝,在“常规”选项卡中到“保存时对所有UTF-8⽂件头标记(BOM)”和“对在UltraEdit⾥创建的新⽂件写⼊UTF-8⽂件头标记(如上⾯)”,把它们的复选框都取消不选,然后确定。这个时候UE默认情况下就不会对没有BOM的⽂件加⼊BOM,注意如果不执⾏上述操作UE默认也是会加的!那已经含有BOM的⽂件如何清除BOM呢?下⾯演⽰给⼤家。⾸先打开⽂件,选择菜单栏“⽂件”-“格式转换”-“UTF-8 转 ASCII”,这样⽂件会被转为ASCII编码,BOM就不会存在了,因为上⾯说过BOM是在UCS编码的头部的,然后再选择菜单栏“⽂件”-“格式转换”-“ASCII 转 UTF-8(Unicode编辑)”,这个时候⽂件会被转回为UTF-8编码,因为我们上⾯选了不⾃动加BOM,所以这个时候的⽂件是不带BOM的,然后保存⽂件。整个操作过程就完毕了。
发布评论