这个问题已经困扰了我好几个星期了。我有一个XML文档,它是我从自主IDOL搜索中收到的,可以成功地将其解组为一组Java对象。但是,如果存在国际字符,例如中文、日文、俄文/西里尔文,它们将转换为问号(?)。
XML文档的第一行将编码设置为UTF-8:
我对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;
}我是不是漏掉了什么?任何帮助,提示或其他资源都将非常感谢。我已经搜索了无数的谷歌列表,但无法解决这个问题。
发布于 2014-01-07 01:42:37
xml.getBytes()...should是..。
xml.getBytes("UTF-8")...so表示转码操作是对称的。
但是因为已经有了字符数据,所以只需使用...
unmarshaller.unmarshal(new StringReader(xml));发布于 2014-01-07 03:58:54
JAXB很可能正确地呈现了字符。问题可能是您用来查看结果文档的工具。
更新
@BlaiseDoughan感谢您的回复。你的评论引起了我的思考。我在Eclipse中运行这段代码,并在控制台和发送数据的JSP页面上看到了问号。但是,我将Eclipse中的默认字符集更改为UTF-8,并在解组后输出数据,现在我可以正确地看到国际字符了。但是,在由JSP呈现之后,它们仍然在浏览器中显示为问号。现在,我将查看JSP代码。
根据您的调查,这似乎是问题所在。
发布于 2018-08-06 14:20:16
您需要使用
xml.getBytes("UTF-8")
但在此之前,如果您使用的是Eclipse,则需要保存您的java文件"Save as UTF“。
然后,JAXB可以轻松地生成包含中文、日文或任何其他语言字符的XML。
我需要在这里提到的另一点是,如果您遇到任何类型的字体问题,例如中文字体显示为?然后,您必须将Eclipse项目转换为UTF8,然后幸运的是,您的代码将支持它。此外,您还必须注意系统中已有的字体。
https://stackoverflow.com/questions/20955768
复制相似问题