gpt4 book ai didi

java - GET请求参数的字符编码

转载 作者:行者123 更新时间:2023-11-28 22:30:59 26 4
gpt4 key购买 nike

大家好 Stackoverflowers。

我有一个问题需要帮助:

我们正在从智能手机应用程序调用 Java/Spring MVC 应用程序的 http GET 网络服务。我们在一个 Tomcat 应用程序服务器上,该服务器由一个带有 mod_proxy 代理设置的 Apache 服务器作为前端。

URL 中嵌入的参数之一是单词“Männen”,这是作为参数之一的组织名称。该应用程序发出 Jquery Ajax GET 请求,参数将应用程序保留为“M%E4nnen”,据我了解,这意味着“ä”已正确进行 URL 编码。当它到达 Spring Controller 时,它已被扭曲为“Männen”。

我用谷歌搜索并发现了很多关于此的线程,它们都建议通过向所有连接器添加 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 Controller 中,参数被记录为“M�nnen”

我的 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>

我真的不知道还能尝试什么或去哪里寻找。如果有人能指导我正确的方向,我将不胜感激。

最佳答案

如果 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 ,但由于信息有限,我不能说去哪里找。也许这些信息就足够了。

关于java - GET请求参数的字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18616256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com