我正在开发一个Spring MVC应用程序,我遇到了一些enconding问题。
这是问题所在: 在浏览器上我输入“João”,在我提交表格后,在控制器上我有“João ”。我的Firefox配置为UTF-8,因此我的Eclispe。如果我使用Firebug检查发送的参数,则值仍然正确。
这是我的编码配置:
在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>
</filter>
<locale-encoding-mapping-list>
<locale-encoding-mapping>
<locale>pt-BR</locale>
<encoding>UTF-8</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>pt</locale>
<encoding>UTF-8</encoding>
</locale-encoding-mapping>
<locale-encoding-mapping>
<locale>en</locale>
<encoding>UTF-8</encoding>
</locale-encoding-mapping>
</locale-encoding-mapping-list>
<filter-mapping>
<filter-name>encoding-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在JSP上:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
在表格上:
<form:form method="post" ... acceptCharset="UTF-8">
在servelt-context.xml上:
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
<beans:property name="contentType" value="text/html;charset=UTF-8" />
</beans:bean>
在我的pom.xml(Maven)中:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java-version>1.6</java-version>
<org.springframework-version>3.1.0.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.1</org.slf4j-version>
</properties>
要调用服务器我正在使用JQuery load()函数,如下所示:
var params = form.serialize();
$.ajaxSetup({
contentType: 'text/html; charset=UTF-8'
});
$("#content").load(url, params);
我把这个 $。ajaxSetup 包括在我绝望的尝试中,但它没有效果。
我注意到在 params 上我将“João”称为“ Jo%C3%83%C2%A3o ”。我使用Firebug改回“João”但仍然遇到同样的问题。
编辑:我的 apache-tomcat-7.0.27 \ conf \ server.xml 还包括URIEncoding =“UTF-8”:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
有什么神奇的想法吗?
提前致谢。
答案 0 :(得分:0)
我正在通过maven tomcan插件运行应用程序( mvn clean tomcat:run ),它忽略了Tomcat配置文件。因此,我在pom.xml中包含了 uriEncoding ,就像这样:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<uriEncoding>${project.build.sourceEncoding}</uriEncoding>
</configuration>
</plugin>
然后我的属性完成了将编码设置为UTF-8的技巧:
<properties>
...
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java-version>1.6</java-version>
...
</properties>
答案 1 :(得分:0)
这有帮助吗(有同样的问题):
https://stackoverflow.com/a/6644019/169277
另外ex:我使用的方法,我没有编码问题:
@RequestMapping(value = "/test")
public ResponseEntity<String> test(Locale loc, String code, HttpServletResponse response) {
//enforce right encoding
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.add("Content-Type", "text/html; charset=utf-8");
return new ResponseEntity<String>("João"), responseHeaders, HttpStatus.CREATED);
}
尝试将变量或值打印到stdout,这样您就知道它不是弹簧问题。还要检查文件编码(eclipse中的java文件),右键单击 - &gt;属性 - &gt;文本文件编码(在底部)。将其设置为UTF-8
。希望有所帮助