JAXBにはXMLの性質に起因するバグがあり、UTF-8で動作しないというSOの回答をいくつか読みました。私の質問は、回避策は何ですか?ユーザーがデータ フィールドにコピー アンド ペーストして 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 をフィールドなどに貼り付けることができます。