Spring MVC 3.1 - 请求标头字符编码问题[UTF-8]

时间:2012-12-11 19:50:32

标签: java spring tomcat spring-mvc character-encoding

我正在尝试从请求标头中获取文件名,尽管我在web.xml中定义了 Spring编码过滤器,但我遇到了字符编码问题。

String fileName = request.getHeader("X-File-Name"); // wrong encoding

的web.xml

        <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

此外,我已将URIEncoding="UTF-8"配置添加到Tomcat server.xml文件中。 并添加了相同的配置JAVA_OPTS。

-DuriEncoding=UTF-8 -Dfile.encoding=UTF-8

2 个答案:

答案 0 :(得分:2)

如果标题总是以UTF-8(或其他ascii),你可以这样做:

public static String reEncode( String input ) {
    Charset w1252 = Charset.forName("Windows-1252"); //Superset of ISO-8859-1
    Charset utf8 = Charset.forName("UTF-8");
    return new String(input.getBytes(w1252), utf8 );
}

...

String fileName = reEncode("Mekanizması.pdf"); //request.getHeader("X-File-Name")
System.out.println(fileName); //Mekanizması.pdf

答案 1 :(得分:0)

没有为HTTP标头定义编码。期望他们最多支持ISO-8859-1。更好地依赖US-ASCII。正如名称所说,param是URI及其参数。没别了。