XML 文件解析--含Unicode字符的XML文件
2014-10-20 14:50
921 查看
在最近的工作中需要使用XML文件做数据存储,由于此XML文件的内容是不同的数据来源的数据,在解析XML文件时,遇到几处相似的异常:无效的XML字符 (Unicode: 0x9e)。 (Unicode: 0x8b)。
Exception in thread "main" org.xml.sax.SAXParseException; lineNumber: 24; columnNumber: 180; 在文档的元素内容中找到无效的 XML 字符 (Unicode: 0x9e)。
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source)
...
一开始,试图对XML文件进行不同格式的修改,UTF-8,ANBI等等,均无效(后来明白过来了,字符值根本没有改变), 接着去寻找解决办法,试图把Unicode转变为UTF-8,也找了相关的算法,但是XML中仅仅含有几处Unicode字符,也没能解决。
后来找了一些资料发现这些字符有些共性:这些无效的字符在一些文档中作为文档处理器的控制编码(微软选择了那些再0x82到0x95之间的字符作为"smart"标点),这些也被Unicode保留作为控制编码的,并且在XML中是不合法的。
在下面的网页中有所有的Unicode字符,对应的UTF-8字符,以及它代表的意义
http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=0x
最后我还是把这些无效的Unicode字符转变为空字符(Scala代码)
Exception in thread "main" org.xml.sax.SAXParseException; lineNumber: 24; columnNumber: 180; 在文档的元素内容中找到无效的 XML 字符 (Unicode: 0x9e)。
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source)
...
一开始,试图对XML文件进行不同格式的修改,UTF-8,ANBI等等,均无效(后来明白过来了,字符值根本没有改变), 接着去寻找解决办法,试图把Unicode转变为UTF-8,也找了相关的算法,但是XML中仅仅含有几处Unicode字符,也没能解决。
后来找了一些资料发现这些字符有些共性:这些无效的字符在一些文档中作为文档处理器的控制编码(微软选择了那些再0x82到0x95之间的字符作为"smart"标点),这些也被Unicode保留作为控制编码的,并且在XML中是不合法的。
在下面的网页中有所有的Unicode字符,对应的UTF-8字符,以及它代表的意义
http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=0x
最后我还是把这些无效的Unicode字符转变为空字符(Scala代码)
def UnicodeStringHandler(value:String) = { val chs = value.toArray for(i <- 0 until value.length()) { if (chs(i) > 0xFFFD) { chs(i) = ' '; } else if (chs(i) < 0x20 && chs(i) != '\t' & chs(i) != '\n' & chs(i) != '\r') { chs(i) = ' '; } else if(chs(i) >= 0x80 && chs(i) <= 0x9f){ chs(i) = ' '; } } new String(chs); }
相关文章推荐
- 解析XML文件时,无效的XML 字符 (Unicode: 0x7)异常处理
- Ajax实现xml文件数据插入数据库(一)--- 构建解析xml文件的js库
- Java乔晓松-使用SAX,DOM,pull解析XML文件以及pull解析生成xml文件
- Dom4j解析xml文件-操作节点和属性及写入其他xml文件
- Python解析文件中的unicode字符
- 生成XML文件的步骤 & 解析XML文件
- cocos2d-x 显示中文字符和解析XML文件
- Dom4j解析xml文件-操作节点和属性及写入其他xml文件
- Cocos2d-x tinyxml2用于xml的解析,自动生成xml文件和解析xml文件
- Java解析Xml文件—判断Xml文件的节点是否存在子节点_以及对节点下不同子节点的内容解析方式
- 使用XML序列化器生成XML文件和利用pull解析XML文件
- Pull解析器解析XML文件和生成XML文件
- xml文件解析,同步xml文件描述的文件
- xml文件解析类及Android项目中常用到的两种获取xml文件方式
- Dom解析是将xml文件全部载入,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件,下面结合这个xml文件来进行dom解析。
- Ajax实现xml文件数据插入数据库(一)--- 构建解析xml文件的js库
- 第一天:主要实现解析xml文件和生成xml文件
- 解析数据库生成XML文件及解析XML文件插入数据库
- Java用String 截取方式解析xml文件、处理大xml文件
- 生成XML文件的步骤 & 解析XML文件