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()方法前面才会生效。

猜你喜欢

转载自breezylee.iteye.com/blog/2034019