0

我的简单问题是为什么我不能通过这样的 url 传递具有不同字符编码的非英语参数:

http://my-project-name:8080/something?word=علی

但是我可以使用带有 post 方法的表单发送参数,但我不想这样做,我想弄清楚为什么我不能使用 get 方法来发送参数!

这是我的配置:

在我的 web.xml 中,我有:

    <filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>sys.system.EncodingFilter</filter-class>
    <init-param>
        <param-name>encodings</param-name>
        <param-value>US-ASCII, UTF-8, EUC-KR, ISO-8859-15, ISO-8859-1</param-value>
    </init-param>
    <init-param>
        <param-name>inputEncodingParameterName</param-name>
        <param-value>ie</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

这是我的小服务程序:

public class EncodingFilter implements Filter {

  @Override
  public void destroy() {

  }

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    if (request.getCharacterEncoding() == null) {
        request.setCharacterEncoding("UTF-8");
    }
    if (response.getCharacterEncoding() == null) {
        response.setCharacterEncoding("UTF-8");
    }
    chain.doFilter(request, response);
  }

  @Override
  public void init(FilterConfig arg0) throws ServletException {
  }
}

我的 jsp 标头已正确设置:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

 <head> 
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> ...

当我想在我的控制器中获取参数字时,我有一个字符编码,这是我的控制器:

@RequestMapping(value = "something")
public String stopJob(@RequestParam("word") String word) {
   ... do something
}

有趣的是,即使我打印,一切都已正确设置

request.getCharacterEncoding();

它向我返回“UTF-8”,但“单词”不正确且已损坏。这里有人知道这个问题吗?谢谢 !

4

3 回答 3

1

你有没有在你的 Tomcat 中设置 URIEncoding 看到tomcat uriencoding 也看到这个Can not send special characters (UTF-8) from JSP to Servlet: 问号显示

于 2013-05-05T07:15:19.580 回答
1

这个问题花了我很多时间,最后我弄清楚了错误是什么:

Eclipse 工作区中的 server.xml 文件与“运行时环境”中的文件不同......

这是废话,因为 eclipse 中的 server.xml 必须与“运行时环境”相同,因为它加载了这些配置并在 Workspace -> Server 文件夹中复制

所以当我弄清楚这一点时,我按照你的猜测做了这些:

1)删除“Eclipse -> Window -> Preference -> Runtime Environment”服务器

2) 删除工作区中的所有内容 -> 服务器文件夹

3) 从“Eclipse -> Window -> Preference -> Runtime Environment”再次添加服务器

4)配置服务器以启动我的项目

5) 更改“workspace/Servers/TomcatServerFolderName”目录中的 server.xml 文件,并在我的连接器中添加 URIEncoding="UTF-8" useBodyEncodingForURI="true"

<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true"/>

在完成所有这些字符编码之后,使用 get 方法就可以了!

于 2013-05-15T08:01:44.160 回答
0

要通过 url 参数传输任意数据,您必须使用UrlEncoder生成的格式以及所有这些 % 和十六进制数字。此上下文中的编码定义了十六进制数字的交互方式。

于 2013-05-07T23:42:30.227 回答