Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于Java上无效XML字符的错误_Java_Xml_Parsing_Unicode - Fatal编程技术网

关于Java上无效XML字符的错误

关于Java上无效XML字符的错误,java,xml,parsing,unicode,Java,Xml,Parsing,Unicode,在Java上解析xml文件时出现错误: 在文档的元素内容中发现无效的XML字符(Unicode:0x0)。 xml来自Web服务 问题是,只有当webservice在本地主机(windows+tomcat)上运行时,我才会收到错误,但当webservice联机时(linux+tomcat)不会收到错误 如何替换无效字符?? 谢谢。这是一个编码问题。要么你把输入流读成UTF8,要么就不是了 读取内容时,应明确指定编码。例如,通过 new InputStreamReader(getInputStre

在Java上解析xml文件时出现错误:

在文档的元素内容中发现无效的XML字符(Unicode:0x0)。

xml来自Web服务

问题是,只有当webservice在本地主机(windows+tomcat)上运行时,我才会收到错误,但当webservice联机时(linux+tomcat)不会收到错误

如何替换无效字符??
谢谢。

这是一个编码问题。要么你把输入流读成UTF8,要么就不是了

读取内容时,应明确指定编码。例如,通过

new InputStreamReader(getInputStream(), "UTF-8")
另一个问题可能是雄猫。尝试在server.xml文件中的tomcat连接器设置中添加URIEncoding=“UTF-8”。因为:

事实证明,JSP规范指出,如果JSP页面的页面编码没有明确声明,那么应该使用ISO-8859-1(!)


摘自。

环顾四周会发现0x0是一个空字符,其他人在XML和空字符方面也有同样的问题。不确定您是如何解析XML的,但如果您首先将其作为字符串获取,则此处会讨论如何替换空值。

Unicode字符
0x0
表示
null
意味着您正在提取的数据某处包含空值(这在XML中是不允许的,因此您会出错)

确保首先找出导致空值的原因

另外,您如何与Web服务交互?如果您使用的是Axis,请确保WSDL为数据输入和输出指定了一些编码。

修复了以下代码:

String cleanXMLString = null;
Pattern pattern = null;
Matcher matcher = null;
pattern = Pattern.compile("[\\000]*");
matcher = pattern.matcher(dirtyXMLString);
if (matcher.find()) {
   cleanXMLString = matcher.replaceAll("");
}

+1为常识方法。盲目地修正这样一个错误而不关心它来自何处不是一个好主意。+1,但是可以通过
dirtyXMLString.replaceAll(“[\\000]*”)
来简化。也可以通过将
*
更改为
+
dirtyXMLString.replaceAll(“[\\000]+”,“”)来加速
这样的字符在保存到mysql时失败。在java中是否有一种通用的方法来查找或忽略这些。添加“UTF-8”没有帮助。-1这些链接现在似乎已经失效。这就是为什么不鼓励只提供链接的答案。