1

我需要在portlet方法á的响应中返回一些特殊的拉丁字母(例如)。serveResource()我尝试了以下方法:

response.setCharacterEncoding("ISO-8859-1") ;
PrintWriter out = resWrapper.getWriter();
out.println("á");
out.close();

或者

response.setContentType("text/plain; charset=ISO-8859-1");
PrintWriter out = resWrapper.getWriter();
out.println("á");
out.close();

前端 XHR 调用(对 serveResource url)没有从上述任何一种方法中获取正确的字符。但是,如果 XHR 将请求发布到 HttpServlet(具有与上面完全相同的响应代码),它就可以正常工作。

有人可以在这里阐明问题吗?

4

2 回答 2

1

浏览器是否有可能根据包含 portlet 的页面上指定的字符集而不是您想要的字符集来解释来自 serveResource() 调用的响应?也许您得到了正确的字符,但是当浏览器呈现它时,它会忽略您在 serveResource() 方法中设置的内容,并使用与页面其余部分相同的字符集来显示它。

这也许可以解释为什么它与 HttpServlet 一起工作得很好,它负责渲染整个页面,而不仅仅是其中的一部分。因此,在这种情况下,在响应上设置字符编码就可以达成交易。

于 2009-11-08T21:15:03.900 回答
0

我会:

  • 将结果输出保存到磁盘并进行十六进制转储;编码为 ISO-8859-1 的 U+00e1 (á) 的值应该是E1. 如果是这样,那么在客户端解释数据的方式就有问题(检查HTTP 标头)。如果不是这种情况,则数据的编码方式存在问题(编码为 UTF-8,字符变为 bytes C3 A1)。
  • 尝试将输出更改为out.println(\u00E1");. 如果这可行,那么问题在于编译器如何加载和解释 Java 源代码。鉴于 servlet 可以工作,这不太可能。
于 2009-11-08T22:14:40.723 回答