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

Java Spring MVC 3.1-请求头字符编码问题[UTF-8],java,spring,tomcat,spring-mvc,character-encoding,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.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>

没有为HTTP头定义编码。希望他们最多支持ISO-8859-1。最好依靠US-ASCII。正如名字所说,param是URI及其param的缩写。没有其他内容。

如果报头始终使用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

我明白了,那么我怎样才能从HTTP头中获得正确的文件值呢?@talha06您现在得到的值是多少?例如,我得到的是“Onay-Mekanizması.pdf”,而不是正确的文件名“Onay-Mekanizması.pdf”。忘掉头吧。您是否正在执行
PUT
?。如果是,请使用URI。这是唯一安全的方法。如果您正在使用多部分
POST
ing。这是自动工作的。非常感谢Esailija的帮助,现在我能够得到正确的值。非常脆弱,因为HTTP头有这么多字符编码保证。@Michael-O是的,这就是为什么它显示UTF-8或ASCII。如果是其他的随机编码,他会看到mojibake。我还建议使用一个普通的查询参数fwiw。
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