`

request.setCharacterEncoding("UTF-8")失效问题

 
阅读更多

request.setCharacterEncoding("UTF-8");

 

在服务器端,要转变请求的字符串编码,用request.setCharacterEncoding("UTF-8");这个方法要放在jsp代码的request.getParameter()方法前面。如

<%@page contentType="text/html" pageEncoding="GBK" session="false"
%><%
		request.setCharacterEncoding("UTF-8");
		String username = request.getParameter("username");
		System.out.println("userName;--->" + username);
		response.setCharacterEncoding("UTF-8");
		System.out.println("---------------------------------------");
		username = request.getParameter("username");
		System.out.println("after request set encoding userName;--->" + username);
		

		}

		%>

 如果不是getParameter()前面,比如放在

String username = request.getParameter("username");
		System.out.println("userName;--->" + username);

 

后面的话,request.setCharacterEncoding("UTF-8");这句转码等于没转,具体原因还没研究清楚。不过,可以放在String queryString = request.getQueryString()的后面,比如:

<%@ page contentType="text/html;charset=GBK"  %><%
String queryString = request.getQueryString();
String reqEnc = getQueryValue(queryString,"req_enc=");
if(reqEnc!=null){
    request.setCharacterEncoding(reqEnc);
}
String respEnc = getQueryValue(queryString,"resp_enc=");
if(respEnc!=null){
    //out.println(respEnc);
    response.setCharacterEncoding(respEnc);
}
%><%!String getQueryValue(String queryString,String key){
    if(queryString==null || queryString.length()==0)return null;
    int reqIdx = queryString.indexOf(key);//req_enc=utf-8&resp_enc=gbk
    String enc = null;
    if(reqIdx!=-1){
        reqIdx = reqIdx+key.length();
        int endIdx = reqIdx;
        for (;
        endIdx < queryString.length() && queryString.charAt(endIdx)!='&';
        endIdx++) {
        }
        if(endIdx>reqIdx){
            enc = queryString.substring(reqIdx,endIdx);
            if(!enc.equalsIgnoreCase("gbk")
                    && !enc.equalsIgnoreCase("utf-8")){
                enc = null;
            }else{
                System.err.println("error :"+key+" is "+ enc);
            }
        }
    }
    return enc;
}%>

 

request.setCharacterEncoding(reqEnc);就是要放在request.getParamter()方法前面才会生效。

 

 

分享到:
评论

相关推荐

    简单的servlet增,删,改,查

    request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); ListUserInfo(request, response); out.flush(); out.close(); } private ...

    基于tomcat8 编写字符编码Filter过滤器无效问题的解决方法

    request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); chain.doFilter((ServletRequest) Proxy.newProxyInstance(this....

    jsp9大内置对象

    &lt;% request.setCharacterEncoding("gb2312"); %&gt; 请求方式:&lt;%= request.getMethod() %&gt; 源地址:&lt;%= request.getRequestURI() %&gt; 协议版本:&lt;%= request.getProtocol() %&gt; 上下文路径:&lt;%= request....

    ajax请求Session失效问题

    response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); out.print("{ \"error\": \"session_expired\", \"message\": \"Session已过期,请重新登录\" }"); out.flush(); return ...

    Servlet过滤器小实例

    req.setCharacterEncoding("utf-8"); // 设置请求字符编码为UTF-8 } catch (UnsupportedEncodingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // 从Session中获取用户信息 ...

    jsp实现用户自动登录功能

    &lt;% request.setCharacterEncoding("UTF-8"); %&gt; // 获取表单参数并验证用户 String username = request.getParameter("username"); String password = request.getParameter("password"); if (isValidUser...

Global site tag (gtag.js) - Google Analytics