JAX-RS和字符编码问题

时间:2014-01-16 14:05:22

标签: java web-services character-encoding jax-rs

我正在使用Jax RS,并且使用简单的POST WS,它接受包含MIME消息(xml +文件)的InputStream。

MIME消息是UTF-8,作为正文部分包含的文件是ISO-8859-1编码的MIME RFC 822中的电子邮件消息,我正在使用Aspose转换为PDF。

作为网络服务运行时,生成的PDF字符不正确(ø,å等)。但是当我尝试使用确切的输入,但是从文件中读取它并使用FileInputStream调用该方法时,生成的PDF就可以了。

以下是代码的简化版本:

@POST
@Path(value = "/documents/convert/{flag}")
@Produces("text/plain")
public String convertFile(InputStream input, @PathParam("flag") String flag) throws WebApplicationException {

    FileInfo info = convertToPdf(input);
    return info.getResponse();
}

如果我将其作为web服务运行,则会生成带有“box”的字符编码错误的PDF,而不是某些字符(例如ø,å等)。当我通过调用

运行具有相同输入的相同代码时
FileInputStream fis = new FileInputStream(file);
convertFile(fis);

生成的PDF具有正确的编码(WS在服务器上运行,文件测试在我的本地计算机上完成)。

这可能是服务器上区域设置的错误设置吗?

3 个答案:

答案 0 :(得分:0)

您是否使用InputStreamReader阅读FileInputStream?如果是这样,你是否使用2参数构造函数初始化它,CharSet.forName("UTF-8")作为第二个参数? (正如你提到的传入流已经是UTF-8)?

答案 1 :(得分:0)

您可能需要告诉容器它是UTF-8。

类似......

@Produces("text/plain; charset=utf-8")

答案 2 :(得分:0)

显然,您的本地文件和MIME邮件正文的编码方式不同。 您的帖子指出该文件是用ISO-8859-1编码的。

如果您使用InputStreamReader(正如Xavier Coulon建议的那样),您应该将预期的编码传递给它。在这种情况下

CharSet.forName("ISO-8859-1")

如果这没有帮助,请您提供convertToPdf(InputStream is)方法的内容