UTF-8编码,表单提交和Spring控制器(UTF-8 encoding with form po

2019-08-31 07:27发布

我想提交一个表单,它有它里面UTF8字符。 该形式如下:

<form id="workflowPersistForm" accept-charset="UTF-8" method="post" action="/workflow-next">>
  <input id="stateGlobal" type="hidden" value=" お問い合わせ" name="state">
</form>

我的服务器是基于一个春天。 我的web.xml中已经拥有了编码过滤器:

 <filter>
     <filter-name>EncodingFilter</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>

问题是,UTF-8字符越来越搞砸了某个地方。 我把一个破发点就在控制器的启动,和人物都在这一点上自己搞砸了。 另外,如果我产生内部控制UTF8字符,它得到正确的浏览器中呈现。 只是,在表格后,控制器不正确地接收到的字符。

任何想法,我可能是做错了什么?

编辑:看来,在新的页面数据不被弄乱了,但它的双重编码。 我无法理解为什么它是双重编码。

编辑2:当我改变的形式获得的,而不是后,一切都完美的作品。 我不知道是什么职位是打破。

Answer 1:

貌似浏览器不发送的字符集,如请求头的内容类型的一部分(甚至当接收字符的方式被设定)和Tomcat涉及此类请求拉丁-1(的身体HTTP://wiki.apache。组织/ tomcat的/ FAQ /#的characterEncoding Q1 )。

所以在以后的点,这可能已经被解码为Latin-1的和编码为UTF-8导致乱码了字符。

移动CharacterEncodingFilter到顶部,迫使编码设置为UTF-8解决了这个问题。



Answer 2:

你有没有在你的web.xml的EncodingFilter一个过滤器映射条目?

<filter-mapping>
  <filter-name>EncodingFilter</filter-name>
  <url-pattern>*</url-pattern>
</filter-mapping>


Answer 3:

我建议你删除CharacterEncodingFilter,其本身可以是双编码的原因。

要调试situtation,你应该先检查是否在浏览器正确发布数据。 使用Firebug(用于Firefox)或Chrome开发者工具(F12)

最有可能的,问题是在服务器端。 你使用哪种服务器? 如果你使用Tomcat,你需要设置CharsetEncoding为UTF-8在server.xml中的连接器元件

更新1:

它看起来非常有可能的问题是,你是设置forceEncoding。 按照该文档

该过滤器可以应用它的编码,如果该请求没有指定任何一种编码,或在任何情况下执行该过滤器的编码(“forceEncoding” =“真”)

当你做一个GET,没有指定的编码,因此它是有道理的,它的作品。

然而,当你这样做的POST,编码已经应用,然后(似乎)被再次应用,因为forceEncoding =真



文章来源: UTF-8 encoding with form post and Spring Controller