【问题标题】:Encoding issues in JSP with Spring when RequestDispatcher.include() is used使用 RequestDispatcher.include() 时 JSP 中的 Spring 编码问题
【发布时间】:2015-03-06 13:42:02
【问题描述】:

在我的应用程序中有一堆消息包作为属性文件。通过<spring:message code="code.here"> 在JSP 文件中查找这些消息。这可行,并且所有特殊字符都会在浏览器中按应有的方式呈现。

现在我需要在其中一个 JSP 文件中添加一些额外的逻辑,并在其位置添加一个 servlet 来完成它的工作并使用 req.getRequestDispatcher("/jsp/some_file.jsp").include(req, resp); 呈现 JSP。

这主要是有效的,但现在所有特殊字符(在我的例子中是德语变音符号)都被破坏了。出于某种原因,消息标签中的变音符号呈现不正确。举例来说,“ungültig”这个词出现了

00000000  75 6e 67 ef bf bd 6c 74  69 67 0a                 |ung...ltig.|

在浏览器中。我知道这是UTF-8 encoded Unicode replacement character,但我不知道它为什么会在那里。

资源文件都有正确的编码,事实上,为了安全起见,我们的资源文件都是ASCII码,“ungültig”实际上编码为ung\u00FCltig,其中0xFC is the encoding of ü in ISO-8859-1定义为所需的编码用于 Java 的属性文件。

我不知道为什么会这样。为什么突然渲染不正确,如何解决?

【问题讨论】:

    标签: java spring jsp encoding


    【解决方案1】:

    解决方案是由于某种我不知道的原因,在使用请求调度程序时忽略了 JSP 标头中有关编码的指令。

    有两种解决方法:

    1. 在 servlet 中使用resp.setCharacterEncoding("UTF-8") 显式设置编码。
    2. 将Spring的CharacterEncodingFilter的参数forceEncoding的值设置为true,例如

      <filter>
          <filter-name>encoding-filter</filter-name>
          <filter-class>org.springframework.web.filter.CharacterEncodingFilter
          </filter-class>
          <init-param>
              <param-name>encoding</param-name>
              <param-value>UTF-8</param-value>
          </init-param>
          <init-param>
              <param-name>forceEncoding</param-name>
              <param-value>true</param-value>
          </init-param>
      </filter>
      

    我使用了第二种方法。我不确定这是否有任何意外的副作用,但现在它似乎工作得很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多