JAXB Unmarshal国际字符导致问号(?)

时间:2014-01-06 17:34:40

标签: jaxb unmarshalling

我已经被这个问题困扰了几个星期了。我有一个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;
}

我有什么东西可以忽略吗?任何帮助,提示或其他资源将非常感谢。我搜索了无数谷歌列表,但无法解决这个问题。

3 个答案:

答案 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。