【发布时间】:2016-06-09 16:50:41
【问题描述】:
我最近将 JBoss AS 5 的应用程序迁移到 Wildfly 8,因此必须从 Java 6 迁移到 Java 8。
我现在在通过 Ant 运行我的一个单元测试时遇到了一个问题:
[javac] C:\Users\test\JAXBClassTest.java:123: error: unmappable character for encoding UTF8
测试类的第123行是:
Assert.assertEquals("Jµhn", JAXBClass.getValue());
该测试专门用于确保 JAXB 编组器可以处理 UTF-8 字符,我相信 µ 可以。我在 JAXB 编组器上添加了一个属性,以确保允许这些字符:
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
我在 Stack Overflow 上看到了多个问题(1、2、3),这些问题似乎相似,但他们的答案枯萎解释了为什么以前以一种方式解码的无效字符现在以另一种方式解码或似乎实际上与我没有相同的问题。
如果所有字符都有效,这会导致问题吗?我知道我一定错过了什么,但我看不到什么。
【问题讨论】:
-
源文件也编码 UTF-8 吗?
-
是的,从带有声明
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>的 XML 文件中读取 -
这已经是我看过的问题之一,将编码更改为 ISO-8859-1 确实允许我的测试通过 Ant,但编组器仍然不接受该字符并抛出一个例外。