blog迁移至:
http://www.micmiu.com
我们在解析XML文件时,会碰到程序发生以下一些异常信息:
引用
org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x{2}) was found in the value of attribute "{1}" and element is "1f".
引用
An invalid XML character (Unicode: 0x1d) was found in the CDATA section.
这些错误的发生是由于一些不可见的特殊字符的存在,而这些字符对于XMl文件来说又是非法的,所以XML解析器在解析时会发生异常,官方定义了XML的无效字符分为三段:
- 0x00 - 0x08
- 0x0b - 0x0c
- 0x0e - 0x1f
解决方法是:在解析之前先把字符串中的这些非法字符过滤掉:
string.replaceAll("[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]", "")
测试代码:TestXmlInvalidChar.java
package michael.xml;
import java.io.ByteArrayInputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
* @author michael
*
*/
public class TestXmlInvalidChar {
/**
* @param args
*/
public static void main(String[] args) {
// 测试的字符串应该为:<r><c d="s" n="j"></c></r>
// 正常的对应的byte数组为
byte[] ba1 = new byte[] { 60, 114, 62, 60, 99, 32, 100, 61, 34, 115,
34, 32, 110, 61, 34, 106, 34, 62, 60, 47, 99, 62, 60, 47, 114,
62 };
System.out.println("ba1 length=" + ba1.length);
String ba1str = new String(ba1);
System.out.println(ba1str);
System.out.println("ba1str length=" + ba1str.length());
System.out.println("-----------------------------------------");
// 和正常的byte 数组相比 多了一个不可见的 31
byte[] ba2 = new byte[] { 60, 114, 62, 60, 99, 32, 100, 61, 34, 115,
34, 32, 110, 61, 34, 106, 31, 34, 62, 60, 47, 99, 62, 60, 47,
114, 62 };
System.out.println("ba2 length=" + ba2.length);
String ba2str = new String(ba2);
System.out.println(ba2str);
System.out.println("ba2str length=" + ba2str.length());
System.out.println("-----------------------------------------");
try {
DocumentBuilderFactory dbfactory = DocumentBuilderFactory
.newInstance();
dbfactory.setIgnoringComments(true);
DocumentBuilder docBuilder = dbfactory.newDocumentBuilder();
// 过滤掉非法不可见字符 如果不过滤 XML解析就报异常
String filter = ba2str.replaceAll(
"[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]", "");
System.out.println("过滤后的length=" + filter.length());
ByteArrayInputStream bais = new ByteArrayInputStream(filter
.getBytes());
Document doc = docBuilder.parse(bais);
Element rootEl = doc.getDocumentElement();
System.out.println("过滤后解析正常 root child length="
+ rootEl.getChildNodes().getLength());
} catch (Exception e) {
e.printStackTrace();
}
}
}
测试代码运行结果如下:
引用
ba1 length=26
<r><c d="s" n="j"></c></r>
ba1str length=26
-----------------------------------------
ba2 length=27
<r><c d="s" n="j"></c></r>
ba2str length=27
-----------------------------------------
过滤后的length=26
过滤后解析正常 root child length=1
对比可见,byte数组及字符串的长度前后是不一样的,但打印到控制台显示的结果却是一样的。同样过滤之后的字符串长度是有变化的。
-----------------------------------分 ------------------------------------隔 ------------------------------------线 --------------------------------------
分享到:
相关推荐
Invalid Multibyte Character Sequence 警告解析 在编程中,特别是在嵌入式系统开发中,我们经常会遇到Invalid Multibyte Character Sequence 警告。这个警告通常来自于编译器,告知我们存在非法的多字节字符序列。...
好多版本是会报错的,[Fatal Error] :24:28: An invalid XML character (Unicode: 0xd863) was found in the element content of the document. org.xml.sax.SAXParseException: An invalid XML character (Unicode:...
好多版本是会报错的,[Fatal Error] :24:28: An invalid XML character (Unicode: 0xd863) was found in the element content of the document. org.xml.sax.SAXParseException: An invalid XML character (Unicode:...
在Spring框架中,XML配置文件是初始化和管理Bean的主要方式之一。然而,有时在尝试解析这些配置文件时,可能会遇到`SAXParseException`,错误信息显示为`cvc-elt.1: 找不到元素“beans”的声明`。这个错误通常意味着...
在ROS(Robot Operating System)开发过程中,遇到`rlexception: invalid roslaunch xml syntax: no element found: line 1, column 0`这样的错误信息时,表明当前的`.launch`文件存在XML语法错误。具体来说,可能是...
NULL 博文链接:https://fish-bone.iteye.com/blog/1732229
今天在项目中,使用Mybatis对oracle数据库进行操作的时候,报出ORA-00911: invalid character的错误,检查了一下SQL,发现都书写正确啊,复制到plsql上执行也都没问题,这什么原因呢? 注意:这里说的是用navicat...
1、ValueError: Invalid control character at: line 1 column 8363 (char 8362) 使用json.loads(json_data)时,出现: ValueError: Invalid control character at: line 1 column 8363 (char 8362) 出现错误的...
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 at org.apache.coyote....
TypeError: ‘required’ is an invalid argument for positionals 的解决方法 当我在使用argparse模块时,遇到了如下错误: import argparse parser = argparse.ArgumentParser(description = 'debug_example') ...
在开发报告过程中,可能会遇到一个令人头疼的问题,即“An error occurred during local report processing: report definition has an invalid target namespace”的异常。这个问题通常涉及到报表定义的目标命名...
NULL 博文链接:https://wilian.iteye.com/blog/1992365
sarscape软件教程,卫星的相关参数和卫星的影像特点和参数
在IT领域,遇到“打开vs提示invalid handle”的问题并不罕见,这通常意味着Visual Studio(简称VS)在尝试访问某些资源或执行特定操作时遇到了错误。此类问题可能源于多种因素,包括但不限于权限问题、系统资源冲突...
**glibc漏洞修复.rpm** 在IT领域,尤其是Linux操作系统中,`glibc`(GNU C Library)是一个至关重要的组件,它是Linux系统的核心部分之一,提供了许多C语言编程所需的函数库。glibc不仅支持C语言,还为其他编程语言...
求问各位大神,在仿真是出现以下问题:Evaluation of expression resulted in an invalid output. Only finite double vector or matrix outputs are supported。估计是.m文件调用的问题,求解释,拜谢拜谢。
SVN冲突处理解决方法 1.SVN冲突产生的原因 2. 解决冲突的方式 3.注意事项 不同版本的同一个位置出现了不同的东西
标题中的"jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误"揭示了一个常见的JavaScript问题,主要涉及jQuery库的一个插件——bgiframe。该插件在Internet Explorer 9(IE9)浏览器中运行时遇到了错误,错误...