【问题标题】:JAX-RS Handle special characters in XML parsingJAX-RS 处理 XML 解析中的特殊字符
【发布时间】:2015-04-17 13:44:01
【问题描述】:

我正在为现有的 Java 应用程序开发一些 REST Web 服务。 我正在使用 JBoss 的 Resteasy JAX-RS(因为现有应用程序在 JBoss serer 上运行)。

下面的网络服务应该根据 id 号返回一个 User 对象。

@GET
@Path("/getUser")
@Produces(MediaType.APPLICATION_XML)
public User getUser(@QueryParam("userId") int userId) {
    return User.load(userId);
}

用户至少包含一个 ID 和一个名称。

public class User {
    private int id;
    private String name;
}

当 JAX-RS 生成 XML 文档时,它无法处理名称中可能出现的特殊字符,例如 æ ø å。

输出的 XML 声称以 UTF-8 编码,但仍然无法显示 æ ø​​ å。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <user>
        <id>18549</id>
        <name>Københavner 1</name>
    </user>

我尝试以这种方式转换为 XML 的每个对象都无法正确编码“æøå”。

有什么建议吗?搜索网络也没有多大帮助。

更新: 当我在客户端收到 XML 时,我首先将其作为字符串处理,然后再使用 JAXB 将其解组为对象。我忘记将字符串的编码设置为 UTF-8。 所以基本上在解组之前这样做:

new String(((String) response).getBytes(), "UTF-8");

【问题讨论】:

    标签: java xml web-services rest


    【解决方案1】:

    您是否尝试过添加字符集:

    @GET
    @Path("/getUser")
    @Produces("application/xml; charset=UTF-8")
    public User getUser(@QueryParam("userId") int userId) {
        return User.load(userId);
    }
    

    更新:

    由于它没有帮助设置字符集,因此您的问题是您将输出作为 ISO-8859-1 使用。

    我的猜测是你想要 unicode 字符 U+00F8,或“带有笔划的拉丁小写字母 o”:ø。 UTF-8 编码是 0xC3B8。在 ISO-88591-1 中,C3 是 Ã,B8 是 ¸(cedilla)。

    因此,请确保接收输出的应用程序理解 UTF-8 并正确显示。

    【讨论】:

    • 感谢您为我指明这个方向。当我在客户端收到 XML 时,我首先将其作为字符串处理,然后再使用 JAXB 将其解组为对象。我忘记将字符串的编码设置为 UTF-8。谢谢!
    【解决方案2】:

    你可以试试这个How to set the charset with JAX-RS?

    @Produces("application/xml; charset=UTF-8") 
    

    【讨论】:

      猜你喜欢
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多