在编写JSP程序时常常会碰到中文字符处理的问题在接受request的中文字符时显示出来一串乱码网上处理方法一箩筐下面说说我用过的两种有效地解决办法
为程序编写一个字符串处理函数用一个静态文件保存在需要处理中文字符的JSP页面中包含它
<%!
publicStringcodeToString(Stringstr)
{
Strings=str;
try
{
bytetemp[]=sgetBytes("ISO");
s=newString(temp);
returns;
}
catch(Exceptione)
{
returns;
}
}
%>
要转换时只需coedeToString(requestgetParameter());就可以了很好用的
一种普遍适用的方法加一个过滤器之后就可以过上一劳永逸的日子了
packagefilters;
importjavaioIOException;
importjavaxservletFilter;
importjavaxservletFilterChain;
importjavaxservletFilterConfig;
importjavaxservletServletException;
importjavaxservletServletRequest;
importjavaxservletServletResponse;
importjavaxservlet
importjavaxservlet
publicclassTomcatFormFilterimplementsFilter{
/**
*Requestjava
*对HttpServletRequestWrapper进行扩充不影响原来的功能并能提供所
有的HttpServletRequest
*接口中的功能它可以统一的对Tomcat默认设置下的中文问题进行解决而只
需要用新的Request对象替换页面中的
*request对象即可
*/
classRequestextendsHttpServletRequestWrapper
{
publicRequest(HttpServletRequestrequest){
super(request);
}
/**
*转换由表单读取的数据的内码
*从ISO字符转到GBK
*/
publicStringtoChi(Stringinput){
try{
byte[]bytes=inputgetBytes("ISO");
returnnewString(bytes"GBK");
}
catch(Exceptionex){
}
returnnull;
}
/**
*ReturntheHttpServletRequestholdedbythisobject
*/
privateHttpServletRequestgetHttpServletRequest()
{
return(HttpServletRequest)supergetRequest();
}
/**
*读取参数修正了中文问题
*/
publicStringgetParameter(Stringname)
{
return
toChi(getHttpServletRequest()getParameter(name));
}
/**
*读取参数列表修正了中文问题
*/
publicString[]getParameterValues(Stringname)
{
Stringvalues[]=
getHttpServletRequest()getParameterValues(name);
if(values!=null){
for(inti=;i<valueslength;i++){
values[i]=toChi(values[i]);
}
}
returnvalues;
}
}
publicvoiddestroy(){
}
publicvoiddoFilter(ServletRequestrequestServletResponse
response
FilterChainchain)throwsIOExceptionServletException{
HttpServletRequesthttpreq=(HttpServletRequest)request;
if()equals("POST")){
requestsetCharacterEncoding("GBK");
}else{
request=newRequest(httpreq);
}
chaindoFilter(requestresponse);
}
publicvoidinit(FilterConfigfilterConfig)throws
ServletException{
}
}
当然要记得改下webxml
<filter>
<filtername>TomcatFormFilter</filtername>
<filterclass>filtersTomcatFormFilter</filterclass>
</filter>
<filtermapping>
<filtername>TomcatFormFilter</filtername>
<urlpattern>/*</urlpattern>
</filtermapping>
上面两种方法都测试过了比较好用