`

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

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics