你好伙伴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参数。这是尝试但没有任何区别。
使用日志,我可以按照要求进行操作:
我的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>
我真的不知道还有什么可以尝试或在哪里看。如果有人能指导我朝着正确的方向前进,我们将非常感激。
答案 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
,但由于信息有限,我不知道在哪里看。也许这个信息就足够了。