jbb*_*jbb 62 forms spring-mvc character-encoding
我在web.xml中有这个
<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>
<filter-mapping>
<filter-name>encoding-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
在file.jsp的顶部我有这个:
<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
Run Code Online (Sandbox Code Playgroud)
在<head>这:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Run Code Online (Sandbox Code Playgroud)
和使用方法POST从FORM设置的latin-1以外的字符仍然不正确.
Aym*_*bsi 13
我有类似的问题.当我发布一个表单并将其保存在DB中时,它被插入为?????? 但如果我使用MySQL WorkBench手动插入数据库,它可以正常工作.
我认为问题只出现在http请求编码中.所以,我几乎实现了我发现的有关此问题的所有建议,例如change server.xml,向web.xml添加过滤器以及更改MySQL配置文件my.ini中的设置,但它并没有解决我的问题.
问题是由于http请求编码和JDBC连接两件事.出于某种原因,MySQL接受的数据为ISO-8859-1,而不是UTF-8.
所以,我还原了所有更改,我在下面做了两处更改: 更改Tomcat server.xml如下:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
Run Code Online (Sandbox Code Playgroud)
更改Jdbc连接属性如下:
jdbc.driver_class=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/dB_Name?useUnicode=yes&characterEncoding=UTF-8
jdbc.username=root
jdbc.password
Run Code Online (Sandbox Code Playgroud)
解决方案的关键是添加useUnicode = yes和characterEncoding = UTF-8
在**web.xml中添加像@jbb这样的过滤器:**
<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>
<filter-mapping>
<filter-name>encoding-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
如果使用Thymeleaf,请更改viewResolver和TemplateResolver,如下所示:
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setContentType("text/html; charset=UTF-8");
templateResolver.setCharacterEncoding("UTF-8");
Run Code Online (Sandbox Code Playgroud)
小智 8
请注意,这仅适用于POST请求.如果您还要编写GET请求(即链接<a href=...>),则必须通过在标记中添加属性来修改服务器的server.xml文件.URIEncoding="UTF-8" useBodyEncodingForURI="true"<Connector>
请参阅:http://wiki.apache.org/tomcat/FAQ/CharacterEncoding
| 归档时间: |
|
| 查看次数: |
39761 次 |
| 最近记录: |