【问题标题】:JSTL Formatting Currency inconsistently -- fails for ResourceRequest's, succeeds everywhere elseJSTL 格式化货币不一致——ResourceRequest 失败,其他地方都成功
【发布时间】:2026-02-10 14:25:02
【问题描述】:

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

我在为RenderRequests 渲染的jsp 和为ResourceRequests 渲染的jsp 中有相同的两行。但无论我做什么,它总是无法产生干净的输出作为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:

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

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

response.setCharacterEncoding("UTF-8");

进入那些方法。

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

【问题讨论】:

  • 问号而不是“特殊字符”通常表示字符编码问题。在您的特定示例中,问号表示所需的字符未包含在响应被告知使用的字符编码中。您应该尝试验证是否所有可能的字符编码设置都设置为同一种编码,现在应该是 UTF-8。我不能发布更详细的答案如何配置它,因为我不做 Portlets。
  • 根据您的编辑,您应该对 response 字符编码感兴趣,而不是对请求编码感兴趣。因此,response.getCharacterEncoding()。对于普通 servlet 环境中的 JSP,您可以通过将 &lt;%@page pageEncoding="UTF-8"%&gt; 置于 JSP 顶部(或通过应用程序范围的 web.xml 设置)来控制此值。但同样,我不确定 portlet 是如何发挥作用的。
  • @BalusC 谢谢——我的愚蠢错误是切换请求和响应。结果和预期的一样。现在尝试看看是否有“Spring”的方式来设置响应的字符编码,或者直接把它放在方法中。
  • 那么&lt;%@page pageEncoding="UTF-8"%&gt; 解决了问题?您需要一种方法将其应用于所有 JSP 吗? Portlet 是否有web.xml
  • @BalusC &lt;%@ page 指令不起作用。这是一个足够小的用例,我只是要对其进行硬编码——不是很好,但对于这个客户端来说,这是一个非常小的问题。请参阅上面的编辑。

标签: jsp spring-mvc jstl portlet


【解决方案1】:

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

response.setCharacterEncoding("UTF-8");

进入 2 个ResourceResponse 方法。

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

【讨论】: