2
回答
request.getServletPath()获取中文时乱码
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

访问链接:http://abc.com/abc/中文

访问以上链接时web.xml中配置的filter会把链接最终映射成真实的访问链接为:http://abc.com/?parame1=abc&parame2=中文.

问题是:访问链接后在filter中通过request.getServletPath()获取到的值中中文会成为乱码,如以上链接在filter中获取到的值为:/abc/乱码.

已经确定页面中都声明页面传输编码为UTF-8:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

已经在filter中对request编辑设定为UTF-8:
HttpServletRequest request = (HttpServletRequest) requestParam;
HttpServletResponse response = (HttpServletResponse) responseParam;
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

同一个fileter中request.getQueryString()和request.getParameter(param)接收中文参数都正常,比如:
http://abc.com/abc/?parame=中文,链接中中文参数能正常接收。

resin服务器的字符编码也设置为UTF-8了:
<character-encoding>UTF-8</character-encoding>


求解request.getServletPath()获取到的值中有中文时会为乱码的解决办法


举报
webhelper
发帖于4年前 2回/810阅
共有2个答案 最后回答: 4年前

浏览器对于URL和请求内容采取的编码方式不一定相同。

  • 对于请求内容会根据页面设置进行编码(<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />)
  • 对于URL,IE会采用UTF-8或者GBK编码,Firefox会采用GBK进行编码
解决方法:

  1. 在URL中尽量使用非ASCII字符。
  2. 在URL中使用java.net.UrlEncode(),编码过的字符。例如,http://example.com/中国,对于“中国”URLEncoder.encode("中国", "utf-8")的结果是:%E4%B8%AD%E5%9B%BD,那么URL应该写成http://example.com/%E4%B8%AD%E5%9B%BD,在后台再对路径进行解码



顶部