我正在开发一个 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 有误。