关于request.getParameter方法获得参数乱码问题
来源:互联网 发布:ip域名查询电信 编辑:程序博客网 时间:2024/06/03 22:48
相信很多java初学者在学习request对象的时候会遇到一个很奇怪的问题,我明明已经设置了request.setCharacterEncoding("UTF-8");和response.setCharacterEncoding("UTF-8");为什么还会出现乱码呢? 这里我们要注意到这两个方法其实只是对Post请求效的,对Get请求是无效的。所以当你的form表单提交的时候是Get方法的时候存在中文的时候还是会出现乱码的。 如何解决呢? 一种简单的办法是在你获得参数的时候对它进行解码,然后在重新进来编码。new_value = new String(old_value.getBytes("ISO-8859-1"), "UTF-8"); 有人会问为什么是用ISO-8859-1进行解码呢, 这就要看你使用的是什么服务器了。 我用的是Tomcat,它的默认编码方式是ISO-8859-1 所以在程序中用这个进行解码,然后重新编码为UTF-8。 另外一种方法 你也可以写一个编码过滤器, 去重写request..getParameter方法。它的实现类的HttpServletRequestWrapper 所以我们要去继承这个类,然后重新, 下面是我的代码,你们可以参考一下。
class MyGetHttpServletRequestWrapper extends HttpServletRequestWrapper {
public MyGetHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
}
@Override
public String getParameter(String name) {
String old_value = super.getParameter(name);
String new_value = null;
if (old_value != null && !old_value.equals("")) {
try {
new_value = new String(old_value.getBytes("ISO-8859-1"),
"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return new_value;
}
@Override
public String[] getParameterValues(String name) {
String[] old_valueArray = super.getParameterValues(name);
String[] new_valueArray = null;
if (old_valueArray != null && old_valueArray.length > 0) {
new_valueArray = new String[old_valueArray.length];
for (int i = 0; i < old_valueArray.length; i++) {
String tempValue = old_valueArray[i];
if (tempValue != null && !tempValue.equals("")) {
try {
tempValue = new String(tempValue
.getBytes("ISO-8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
new_valueArray[i] = tempValue;
}
}
}
return new_valueArray;
}
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String method = request.getMethod();
if (method.equals("GET")) {
// GET请求,重写request.getParameter方法。
request = new MyGetHttpServletRequestWrapper(request);
} else {
// struts.i18n.encoding和request.setCharacterEncoding("UTF-8")只针对POST请求有效。有GET请求无效。
request.setCharacterEncoding("UTF-8");
}
response.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
- 关于request.getParameter方法获得参数乱码问题
- request.getParameter("参数") 乱码问题
- JSP关于request.getParameter("");中文乱码问题
- Request.getParameter()乱码问题
- request.getParameter 乱码问题
- 关于request.getParameter中文乱码
- request.getParameter中文乱码问题
- request.getParameter("")的乱码问题
- request.getParameter中文乱码问题
- request.getParameter中文乱码问题
- request.getParameter中文乱码问题
- request.getParameter中文乱码问题
- request.getparameter中文乱码问题
- jsp中关于request.getParameter中文的乱码问题
- request.getParameter()在get和post方法中文乱码问题
- jsp request.getParameter()乱码问题 乱码
- request.getParameter(“参数名”) 中文乱码解决方法
- request.getParameter(“参数名”) 中文乱码解决方法
- RxJava2.0教程(一)
- dp专题 第十八题 买书
- 02:不吉利日期
- Discuz!论坛运营之使用CDN后无法获取真实IP的解决方法
- 机械版CG 实验1 像素点的生成
- 关于request.getParameter方法获得参数乱码问题
- Cantor表 1083
- 机械版CG 实验2 直线生成算法的实现
- ASCII码对照表
- 机械版CG 实验3 变换
- 22:神奇的幻方
- 关于Java对象在内存中的状态和对象的引用的类型
- 蛇形填充数组
- 机械版CG 实验3 变换参考实例