org.xml.sax.SAXParseException: 在三字节UTF-8序列中,第二字节无效。

5

我在生产环境中遇到了上述错误,而在UAT中该过程顺利进行。

我想知道这个错误是否与jar文件加载有关。我们正在使用webmethods,在一个Java服务中发生了上述错误。


请问您能否提供更多信息?也许是完整的堆栈跟踪,或者一些代码,或者一个示例文件?如果您能找出在示例文件中检测到无效字符的位置就更好了...最后,请尝试将生产文件传播到UAT并查看错误是否仍然存在。 - durron597
上述XML在UAT中被解析,而同一文件在生产环境中失败了... - abhijith501
1
我已经找到了这个问题的确切原因。问题在于生产环境和验收环境中的区域设置和默认字符不同。我使用了以下代码来查找区域设置:String deEncoding= ""+Charset.defaultCharset();String locale=""+Locale.getDefault(); 编码和区域设置是不同的。我已经在byteArray = inputInXML.getBytes("UTF-8");中硬编码了UTF-8的值,结果成功了。 - abhijith501
https://dev59.com/-2Up5IYBdhLWcg3wEETd - Abdull
2个回答

7

最有可能的情况是该文件使用ISO-8859-1编码并包含扩展ASCII字符(介于0x80和0xff之间的字符)。解析器需要UTF-8编码,而其中一个扩展字符被解释为3个字节序列的起始符,但其后面没有有效的字节。


3
我找到了导致这个问题的确切原因。问题在于生产环境和验收环境中的区域设置和默认字符不同。我使用了以下代码来查找区域设置:String deEncoding= ""+Charset.defaultCharset();String locale=""+Locale.getDefault(); 编码和区域设置是不同的。我在inputInXML.getBytes("UTF-8")中硬编码了UTF-8的值,结果成功了。 - abhijith501

0

您加载的 XML 文件未正确编码:请查看生产环境文件,至少有一个不是 UTF-8。


谢谢回复。我已经检查了所有文件,它们都是UTF-8编码的... 我对jar文件有疑问... 这个异常是否与jar有关? - abhijith501
生产环境和测试环境中的JAR包是否相同?查看两个环境之间的差异。一个JAR包可能包含在运行时解析的XML文件。 - Aubin
castor-xml-schema-1.2.jar 这个 jar 文件有什么用? - abhijith501
Castor 提供了 Java 到 XML 绑定,Java 到 SQL 持久化等功能。 - Aubin
将其内容提取到一个目录中,将其添加到类路径中,从类路径中删除该jar文件,再次运行并粘贴完整的异常堆栈,也许我们可以帮助您解决问题... - Aubin
我已经找到了这个问题的确切原因。问题在于生产环境和验收环境中的区域设置和默认字符不同。我使用了以下代码来查找区域设置:String deEncoding= ""+Charset.defaultCharset();String locale=""+Locale.getDefault(); 编码和区域设置是不同的。我已经在byteArray = inputInXML.getBytes("UTF-8");中硬编码了UTF-8的值,结果成功了。 - abhijith501

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接