1

我正在开发一个 Spring JSR 286 Portlet 应用程序。语言环境由登录时加载的默认语言设置驱动。

然后我需要通过 portlet 进行货币格式化。例如,我执行以下操作:

<fmt:setLocale value="en_IE" />
result: <fmt:formatNumber type="currency" value="324.00" currencyCode="EUR" />

(通常,所有这些值都是动态设置的。)

当我进行正常操作时,这会产生很好的结果。

result: €324.00 

除了,在应用程序中,当我@ResourceMapping提出请求时。在这种情况下,仅在这里,我得到:

result: ?324.00

我在为s 渲染RenderRequest的 jsp 和为 s渲染的 jsp 中有相同的两行ResourceRequest。但无论我做什么,它总是无法产生干净的输出作为ResourceRequest.

关于什么可能导致不一致的任何想法?


第二次编辑:

在 +BalusC 的第二条评论之后,我将以下内容放入 jsp:

<% System.out.println("Response Char Encoding: " + response.getCharacterEncoding());  %>

对于正常的请求,它可以工作,我得到:

SystemOut O Response Char Encoding: UTF-8

对于渲染请求,它不起作用,我得到:

SystemOut O Response Char Encoding: ISO-8859-1

所以,是的,正如预测的那样,这是一个字符编码问题。

--

编辑 3:

所以,问题是如何在 Spring 中设置 UTF-8 的字符编码ResourceResponse

放入 page 指令<%@page pageEncoding="UTF-8"%>不会覆盖上面看到的默认编码。将其直接构建到 Spring 中的方法是复杂的 hacks(请参阅web.xml 中的带有 CharacterEncodingFilter 的 Spring 编码),并且鉴于我只有少数资源请求方法,似乎最简单的方法就是放

response.setCharacterEncoding("UTF-8");

进入那些方法。

将不胜感激任何其他建议,特别是如果我对如何更轻松地将其放入 Spring 有误。

4

1 回答 1

0

我对此的最终解决方案是在上面的编辑#3 中。只是硬编码

response.setCharacterEncoding("UTF-8");

进入2ResourceResponse种方法。

如果您有更广泛的资源请求并需要全面的解决方案,请点击问题中的链接。

于 2012-08-27T00:10:41.833 回答