我读过一些 SO 答案,说 JAXB 有一个错误,它归咎于 XML 的性质,导致它不能与 UTF-8 一起使用。我的问题是,那么解决方法是什么?我可能会得到用户输入的 unicode 字符,复制并粘贴到我需要在其他地方保存、编组、解组和重新显示的数据字段中。
(更新)更多背景:
Candidate c = new Candidate();
c.addSubstitution("3 4ths", "\u00BE");
c.addSubstitution("n with tilde", "\u00F1");
c.addSubstitution("schwa", "\u018F");
c.addSubstitution("Sigma", "\u03A3");
c.addSubstitution("Cyrillic Th", "\u040B");
jc = JAXBContext.newInstance(Candidate.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
ByteArrayOutputStream os = new ByteArrayOutputStream();
marshaller.marshal(c, os);
String xml = os.toString();
System.out.println(xml);
jc = JAXBContext.newInstance(Candidate.class);
Unmarshaller jaxb = jc.createUnmarshaller();
ByteArrayInputStream is = new ByteArrayInputStream(xml.getBytes());
Candidate newCandidate = (Candidate) jaxb.unmarshal(is);
for(Substitution s:c.getSubstitutions()) {
System.out.println(s.getSubstitutionName() + "='" + s.getSubstitutionValue() + "'");
}
这是我放在一起的一个小测试。我得到的确切字符并不完全在我的控制之下。用户可以将带有波浪号的 N 粘贴到该字段或其他任何内容中。