Java 11与Java 8 XML处理输出不一致——高代理字符问题
Java 11迁移后XML特殊UTF-8字符输出异常解决方案及Xerces资源指引
一、带调试信息的Xerces JAR获取
- 可通过Maven Central获取带调试符号的Xerces工件:在项目依赖中指定带
-sources或-javadoc分类器的版本;若需要编译时包含调试信息的JAR,部分版本提供-debug后缀变体,也可自行从源码编译时添加-g参数生成调试版。 - 示例Maven依赖配置(以2.12.2版本为例):
<dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.12.2</version> <classifier>sources</classifier> <scope>provided</scope> </dependency>
二、Xerces项目正确SVN地址
Xerces官方SVN仓库地址为:https://svn.apache.org/repos/asf/xerces/java/trunk/
可直接使用SVN客户端checkout,或通过浏览器访问该地址浏览源码结构。
三、额外排查建议
- Java 11默认XML解析器与Java 8不同(Java 8内置Xerces,Java 11可能切换为其他JAXP实现),可显式指定使用XercesImpl验证:添加XercesImpl依赖后,设置系统属性
javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl。 - 检查XML输出编码:确保输出流明确指定UTF-8,比如使用
Transformer时调用transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"),避免默认编码差异导致字符损坏。
内容的提问来源于stack exchange,提问作者Eddie
相关产品推荐
相关产品推荐

