我已经被这个问题困扰了几个星期了。我有一个XML文档,我从Autonomy IDOL搜索中获得,可以成功地将其解组为一组Java对象。但是,如果有国际字符,例如中文,日文,俄文/西里尔文,则会将它们转换为问号(?)。
XML文档的第一行将编码设置为UTF-8:<?xml version =“1.0”encoding =“UTF-8”standalone =“yes”?>
我正在使用以下代码进行Unmarshal操作:
public static AutnResponse convertXmlToResponse(String xml) {
AutnResponse resp = null;
try {
JAXBContext jc = JAXBContext.newInstance(AutnResponse.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
resp = (AutnResponse) unmarshaller.unmarshal(new InputStreamReader(new ByteArrayInputStream(xml.getBytes()),"UTF-8"));
} catch(Exception ex) {
System.out.println("Caught exception trying to unmarshal XML file: " + ex.getMessage());
ex.printStackTrace(System.out);
}
return resp;
}
我有什么东西可以忽略吗?任何帮助,提示或其他资源将非常感谢。我搜索了无数谷歌列表,但无法解决这个问题。
答案 0 :(得分:1)
xml.getBytes()
......应该......
xml.getBytes("UTF-8")
...以便转码操作是对称的。
但由于已有字符数据,只需使用...
unmarshaller.unmarshal(new StringReader(xml));
答案 1 :(得分:0)
JAXB很有可能正确渲染字符。问题可能是您用来查看生成的文档的工具。
<强>更新强>
@BlaiseDoughan感谢您的回复。你的评论让我思考 关于那个。我在Eclipse中运行它并且看到了这个问题 控制台中的标记以及我发送的JSP页面上的标记 数据。但是,我将Eclipse中的默认字符集更改为UTF-8和 在Unmarshalling之后输出数据,现在我看到了 国际字符正确。但是,它们仍在显示 作为JSP渲染后浏览器中的问号。一世 现在将查看JSP代码。
根据您的调查,这似乎是个问题。
答案 2 :(得分:0)
您需要使用
xml.getBytes(“ UTF-8”)
,但是如果要使用Eclipse,则需要先保存Java文件“另存为UTF”。
然后JAXB可以愉快地生成带有中文,日语或任何其他语言字符的XML。