首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAXB对国际字符的解组会导致问号(?)

问JAXB对国际字符的解组会导致问号(?)
EN

Stack Overflow用户
提问于 2014-01-07 01:34:40
回答 3查看 4.9K关注 0票数 3

这个问题已经困扰了我好几个星期了。我有一个XML文档,它是我从自主IDOL搜索中收到的,可以成功地将其解组为一组Java对象。但是,如果存在国际字符,例如中文、日文、俄文/西里尔文,它们将转换为问号(?)。

XML文档的第一行将编码设置为UTF-8:

我对Unmarshal操作使用了以下代码:

代码语言:javascript
复制
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;
}

我是不是漏掉了什么?任何帮助,提示或其他资源都将非常感谢。我已经搜索了无数的谷歌列表,但无法解决这个问题。

EN

回答 3

Stack Overflow用户

发布于 2014-01-07 01:42:37

代码语言:javascript
复制
xml.getBytes()

...should是..。

代码语言:javascript
复制
xml.getBytes("UTF-8")

...so表示转码操作是对称的。

但是因为已经有了字符数据,所以只需使用...

代码语言:javascript
复制
unmarshaller.unmarshal(new StringReader(xml));
票数 1
EN

Stack Overflow用户

发布于 2014-01-07 03:58:54

JAXB很可能正确地呈现了字符。问题可能是您用来查看结果文档的工具。

更新

@BlaiseDoughan感谢您的回复。你的评论引起了我的思考。我在Eclipse中运行这段代码,并在控制台和发送数据的JSP页面上看到了问号。但是,我将Eclipse中的默认字符集更改为UTF-8,并在解组后输出数据,现在我可以正确地看到国际字符了。但是,在由JSP呈现之后,它们仍然在浏览器中显示为问号。现在,我将查看JSP代码。

根据您的调查,这似乎是问题所在。

票数 0
EN

Stack Overflow用户

发布于 2018-08-06 14:20:16

您需要使用

xml.getBytes("UTF-8")

但在此之前,如果您使用的是Eclipse,则需要保存您的java文件"Save as UTF“。

然后,JAXB可以轻松地生成包含中文、日文或任何其他语言字符的XML。

我需要在这里提到的另一点是,如果您遇到任何类型的字体问题,例如中文字体显示为?然后,您必须将Eclipse项目转换为UTF8,然后幸运的是,您的代码将支持它。此外,您还必须注意系统中已有的字体。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20955768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档