0

我正在开发一个 Spring MVC 应用程序,但在编码方面遇到了一些问题。

这就是问题所在:在浏览器上我输入“ 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,但它没有效果。

我注意到在参数上我有这个“ João ”作为“ Jo%C3%83%C2%A3o ”。我使用 Firebug 改回“João”,但仍然遇到同样的问题。

编辑:还包括 URIEncoding="UTF-8" 我的apache-tomcat-7.0.27\conf\server.xml

<Connector port="8080" protocol="HTTP/1.1"
   connectionTimeout="20000"
   redirectPort="8443" 
   URIEncoding="UTF-8" />

有什么神奇的想法吗?

提前致谢。

4

2 回答 2

0

这有帮助吗(有同样的问题):

https://stackoverflow.com/a/6644019/169277

另外例如:在我使用的方法中,我对编码没有任何问题:

@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);
    }

尝试将变量或值打印到标准输出,这样您就知道这不是弹簧问题。还要检查文件编码(eclipse中的java文件),右键单击->属性->文本文件编码(在底部)。将其设置为UTF-8。希望有帮助

于 2012-07-05T20:03:49.600 回答
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>
于 2012-07-05T19:41:39.243 回答