解析xml 无效字符

zfyq124 2013-10-13 04:02:52
要解析一个xml文件,但是这个xml文件不标准。里边存在像这样的字符。现在由于xml文件太大,不可能把所有的无效字符都找出来,替换掉。现在怎样解析这个xml文件?
...全文
877 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_25644179 2015-01-27
  • 打赏
  • 举报
回复
楼主解决了没有,解决了话请告诉我。。急求。感谢!!
zfyq124 2013-10-15
  • 打赏
  • 举报
回复
引用 10 楼 Inhibitory 的回复:
在 UTF-8中,ASCII 码的第一个bit都是0,而其他字符的第一个bit都是1,所以可以直接进行比较,不用担心破坏多UTF-8里多字节的字符的编码。
恩,行了。谢谢了。
Inhibitory 2013-10-13
  • 打赏
  • 举报
回复
在 UTF-8中,ASCII 码的第一个bit都是0,而其他字符的第一个bit都是1,所以可以直接进行比较,不用担心破坏多UTF-8里多字节的字符的编码。
Inhibitory 2013-10-13
  • 打赏
  • 举报
回复
我不知道有没有工具可以把 UTF-8存储的文件中非法的字符去掉,但是可以自己写程序利用UTF-8的原理,把这些非法字符删除。 UTF-8 是以 8位(即 1个字节)为单元对原始码进行编码(注意一 点:这里所讲的原始码都是指Unicode码),并规定:多字节码(2个字 节以上才称为多字节)以转换后第1个字节起头的连续“1”的数目(这 些连续“1”称为标记位),表示转换成几个字节:“110”连续两个 “1”,表示转换结果为2个字节,“1110”表示3个字节,而“11110” 则表示4个字节……跟随在标记位之后的“0”,其作用是分隔标记位和 字符码位。第2~第4个字节的起头两个位固定设置为“10”,也作为标 记,剩下的6个位才做为字符码位使用。   这样,2字节UTF-8码剩下11个字符码位,可用以转换0080~07FF的 原始字符码,3字节剩下16个字符码位,可用以转换0800~FFFF的原始字 符码,由此类推。编码方式的模板如下: 原始码(16进制) UTF-8编码(二进制) -------------------------------------------- 0000 - 007F 0xxxxxxx 0080 - 07FF 110xxxxx 10xxxxxx 0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx 参考 ASCII 码表,很明显,这些非不可见的字符都是控制字符,在0000 - 007F 0xxxxxxx 如果不是严格的考虑(如不完整的 UTF-8编码),只需要简单的删除这些不可见字符,只要用按字节读取文件,每个字节都比较一下,如果是控制字符(例如上面的 0E),直接丢掉,而其他的字节仍按顺序保存到新的 XML 文件里。
zfyq124 2013-10-13
  • 打赏
  • 举报
回复
引用 7 楼 Inhibitory 的回复:
复制你的 XML,会发现里面有一些不可见的字符,例如 SO (Shift Out). 就是这些字符破坏了 XML 文件。 可以如图看到这个 SO,也可以用二进制编辑器看到,其值是0E
怎么解决啊?它里边还有好多这样的东西!
Inhibitory 2013-10-13
  • 打赏
  • 举报
回复
复制你的 XML,会发现里面有一些不可见的字符,例如 SO (Shift Out).
就是这些字符破坏了 XML 文件。
可以如图看到这个 SO,也可以用二进制编辑器看到,其值是0E

zfyq124 2013-10-13
  • 打赏
  • 举报
回复
引用 1 楼 Inhibitory 的回复:

复制xml有一点没复制上?
zfyq124 2013-10-13
  • 打赏
  • 举报
回复
关键这只是我找到的中间一个的无效字符,整个xml中还有的是
zfyq124 2013-10-13
  • 打赏
  • 举报
回复
引用 3 楼 Inhibitory 的回复:

xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE PERSONS [
<!ENTITY nbsp " ">
<!ENTITY copy "©">
<!ENTITY reg "®">
<!ENTITY trade "™">
<!ENTITY mdash "—">
<!ENTITY ldquo "“">
<!ENTITY rdquo "”">
<!ENTITY pound "£">
<!ENTITY yen "¥">
<!ENTITY euro "€">
]>
<PERSONS>
<person>
<summary>L仔,Worldwide,Bboyworld DJ成員,美國Dragon Diggers
DJ團長,『壹陆叁』創辦人,廣州Energy音樂總監,周館弟子,KC劍球隊員,唱盤主義,老巨蟹,黑膠收藏</summary>
</person>
</PERSONS>

异常信息:

Inhibitory 2013-10-13
  • 打赏
  • 举报
回复

zfyq124 2013-10-13
  • 打赏
  • 举报
回复
引用 1 楼 Inhibitory 的回复:
发这个 XML 文件来看看,XML 支持 UTF-8编码的,这种字符也是有效的编码,不应该无效。
xml文件太大了,我昨天找了好长时间找到无效字符的列,就是上面的那种特殊字符!! 这是解析的时候的异常信息 Exception in thread "main" org.xml.sax.SAXParseException; systemId: file:/D:/Java/workspace/weibousertest/data/NLPIR%E5%BE%AE%E5%8D%9A%E5%8D%9A%E4%B8%BB%E8%AF%AD%E6%96%99%E5%BA%93.xml; lineNumber: 608194; columnNumber: 112; 在文档的元素内容中找到无效的 XML 字符 (Unicode: 0xe)。 at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:441) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368) at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1388) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2856) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:302) at javax.xml.parsers.SAXParser.parse(SAXParser.java:328) at weibo.SAXCreateDB.main(SAXCreateDB.java:24)
Inhibitory 2013-10-13
  • 打赏
  • 举报
回复
发这个 XML 文件来看看,XML 支持 UTF-8编码的,这种字符也是有效的编码,不应该无效。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧