GET请求参数的字符编码

时间:2013-09-04 14:14:26

标签: java tomcat spring-mvc encoding utf-8

你好伙伴Stackoverflowers。

我有一个问题,我需要一些帮助:

我们正在从智能手机应用程序到Java / Spring MVC应用程序进行http GET Web服务调用。我们在Tomcat应用程序服务器上,该服务器由具有mod_proxy代理设置的Apache服务器提供。

网址中嵌入的参数之一是“Männen”,它是组织名称之一,是其中一个参数。该应用程序发出Jquery Ajax GET请求,该参数将应用程序保留为“M%E4nnen”,据我所知,“ä”已正确进行URL编码。当它到达Spring控制器时,它已被扭曲为“Männen”。

我已经google了,发现了很多线程,他们都建议通过向所有连接器添加URIEncoding =“UTF-8”来修改Tomcat server.xml文件。当然,我试过这个。它做了一个改变,但没有解决问题。字符串现在以“M�nnen”形式出现。还有一个线程建议您将“nocanon”添加到Apache代理配置中的ProxyPass参数。这是尝试但没有任何区别。

使用日志,我可以按照要求进行操作:

  1. 在Apache访问日志中,参数记录为“M%E4nnen”
  2. 在Apache代理日志中,参数记录为“M%E4nnen”
  3. 在Tomcat localhost_access日志中,参数记录为“M%E4nnen”
  4. 在接收请求的Spring控制器中,参数记录为“M�nnen”
  5. 我的Spring应用程序也有一个字符编码过滤器,但据我所知,它只适用于请求体。配置如下:

    <filter>
      <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>
    

    我真的不知道还有什么可以尝试或在哪里看。如果有人能指导我朝着正确的方向前进,我们将非常感激。

1 个答案:

答案 0 :(得分:0)

如果HTML在Windows-1252(或“子集”ISO-8859-1)中,那么%E4就可以了。 但是,如果HTML是Unicode,UTF-8,则不是。

String auml = "\u00e4";
String aumlPerc = URLEncoder(auml, "UTF-8");
URLDecoder.decode(aumlPerc, "UTF-8");

除了包含字符集UTF-8的HTML页面外,您还可以拥有<form accept-charset="UTF-8" ...>

似乎页面错误地发送%E4,被接受为ISO-8859-1(默认),转换为多字节UTF-8序列,但那被错误地认为是ISO-8859-1。

设置编码有一些螺丝,比如request.setEncoding,但由于信息有限,我不知道在哪里看。也许这个信息就足够了。