问题
最近在开发中遇到了在 Servelet 中使用 response.sendRedirect(url) 进行页面重定向时, 由于 url 中含有中文参数而导致跳转时 url 出现乱码现象而导致页面无法访问的问题.
解决方案
在 url 参数中如果携带了中文字符, 一般都需要在服务端进行编码处理, 否则就会出现乱码问题. 因此只需要对含有中文字符的参数进行编码后再拼接到 url 中再进行跳转即可.
- // 对含有中文的参数进行编码
- String systemCode=URLEncoder.encode(systemCode,"UTF-8");
- String configCode=URLEncoder.encode(configCode,"UTF-8");
- String name=URLEncoder.encode(name,"UTF-8");
- // 拼接文件的路径
- String path=systemCode+"/"+configCode+"/"+name;
- response.sendRedirect("http://localhost:8080/pdf/show?file="+path);
可以看到, 我使用的是 UTF-8 格式进行编码, 这样做的一个好处是不需要在客户端进行解码, 中文参数可直接通过 JS 方法获取到, 不会出现乱码的情况.
如果是使用其他格式进行编码的话, 在客户端可使用 JS 调用 decodeURI,decodeURIComponent 等方法进行解码即可.
来源: http://www.jianshu.com/p/30db5c8285ce