我正在使用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在服务器上运行,文件测试在我的本地计算机上完成)。
这可能是服务器上区域设置的错误设置吗?
答案 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)
方法的内容