我的简单问题是为什么我不能通过这样的 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”,但“单词”不正确且已损坏。这里有人知道这个问题吗?谢谢 !