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