关于Java上无效XML字符的错误
在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
在文档的元素内容中发现无效的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这些链接现在似乎已经失效。这就是为什么不鼓励只提供链接的答案。