有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring MVC 3.1请求头字符编码问题[UTF8]

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

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

网络。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服务器中。xml文件。 并添加了相同的配置JAVA_选项

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

共 (2) 个答案

  1. # 1 楼答案

    如果报头始终使用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
    
  2. # 2 楼答案

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