中文乱码问题解决_第1页
中文乱码问题解决_第2页
中文乱码问题解决_第3页
中文乱码问题解决_第4页
中文乱码问题解决_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在网上搜了很多资料都没有搞定,一般都有以下几种说法:方法1:在后台中先获得字符串的iso-8859-1编码形式数组,再使用此数组实例一个UTF-8编码形式String类型字符串.页面提交的url为:leavesp?work=部门主管审批后台处理:StringinStr=request.getParameter("work");StringoutStr=newString(inStr.getBytes("iso-8859-1”),"UTF-8”);方法2:在页面传递过来时先通过JavaScript将URL编码,再到后台进行解码:页面部分:<scripttype="text/javascript">functiondogetMethod(url){//url编码前:leavesp?work=部门主管审批url=encodeURI(url);//url编码后:leavesp?work=%E9%83%A8%E9%97%A8%E4%B8%BB%E7%AE%A1%E5%AE%A1%E6%89%B9window.open(uri,’’,’’);}</script>后台部分:(解码)StringinStr=request.getParameter("work");StringoutStr=.URLDecoder.decode(inStr);尝试过两种方法后好像都不行,在后台获取到的字符还是会乱码.试完之后真想哭.*o*使用第一种方法后发现:在请求(request)中获得的字符串是这样的:26AAO4-1UEoAu使用newString(inStr.getBytes("iso-8859-T'),"UTF-8”);处理后字符成了:没法,只能再试第二种方法了,使用后发现:在页面中使用encodeURI(url)后,字符串是这样的:%E9%83%A8%E9%97%A8%E4%B8%BB%E7%AE%A1%E5%AE%A1%E6%89%B9好像有希望了!!!!应该只要在后台再来decoder一下就行了吧,偶是这样想的,也是这样做的:在后台中:StringinStr=request.getParameter("work");outStr=.URLDecoder.decode(inStr);在请求中获得的字符串是这样的:e「6一瓦洛®i5®i&%Jdecoder处理后得出的字符串为:e「6一'ai»9®ia®i$%1这时候真想哭啊!!%#$%@@!@$$##革命尚未成功,还需努力!!!从第二种方法中发现:在请求中获得的字符串巳经乱码了,用decoder处不处理值都是一个样!!明明我在页面传过来的值是巳经encode过了的字符,而后来取出来却•••.,这是为什么呢?难倒是页面编码设置得有问题?看了一下页面编码是:pageEncoding="UTF-8”改了!改成:pageEncoding="iso-8859-1”试试.浏览页面上,发现页面上的中文变成了很多e&%。之类的字符,不管了,再试下,还是一样的结果.涛声依旧!忽然想到应该是在获得字符串之前,也就是在request.getParameter("work”);这之前的某个地方巳经将URL进行了decoder,并且将获得的字符用Iso-8859-1的编码方式存储过了.所以在request中会得到这些类似于e&%。之类的字符,这种字符应该就是中文的iso-8859-1的形式!!有办法了,既然巳经获得了iso-8859-1编码形式的中文,那就只要再使用第一种方法(先获得字符串的iso-8859-1数组,再将它实例成UTF-8的字符串)来进行处理不就OK了!试过之后果然OK!!!处理中文乱码代码实现部分:jsp页面:<%@pagelanguage="java"pageEncoding="UTF-8"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><scripttype="text/javascript">//开启网页对话脚本functionopenDialog(url,width,height)(varproperty="status:no;center:yes;resizable:yes;scroll:yes;dialogWidth:"+width+"px;dialogHeight:"+height+"px;";varret=window.showModalDialog(url,'modalDialogwin',property);if(ret==null||ret==""){returnfalse;}returntrue;}//查看待办工作脚本functionshowork(url){//将url地址进行编码url=encodeURI(url);//alert(url);//调用openDialog方法开启网页对话框openDialog(url,900,500)}</script><title>待办工作查看</title></head><body><!--部分代码略--><tableborder="1"align="center"><tr><td><ahref="#"onclick="javascript:showork('leavesp?work=部门主管审批')">查看待办工作</a></td></tr></table></body></html>页面部分就一个超连接,用来开启一个网页对话框,只是开启的这个对话框中请求的不是一个物理的页面,而是请求的一个servlet(leavesp),而且url中带有中文参数值(?work=部门主管审批)。为了处理中文乱码部分能够在整个WEB系统中都能够使用到,所以将中文乱码处理写成了一个Filter(过滤器),并在web.xml中配置所有的请求都将经过这个Filter进行过滤。Filter部分的代码如下:文件名:ProFilter.javapackagecom.util.filters;importjava.io.IOException;importjava_.io.UnsupportedEncodingException;importjava.util.Enumeration;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassProFilterimplementsFilter(protectedFilterConfigfilterConfig;/***初始化*/publicvoidinit(FilterConfigfilterConfig)throwsServletException(this.filterConfig=filterConfig;}/***将inStr转为UTF-8的编码形式@paraminStr输入字符串@returnUTF-8的编码形式的字符串@throwsUnsupportedEncodingException*/privateStringtoUTF(StringinStr)throwsUnsupportedEncodingException(StringoutStr="";if(inStr!=null)(//outStr=.URLDecoder.decode(inStr);//不用decode了,至U这的时候就巳经自动decode过了//将字符串转为UTF-8编码形式outStr=newString(inStr.getBytes("iso-8859-1"),"UTF-8");}returnoutStr;}/***中文乱码过滤处理*/publicvoiddoFilter(ServletRequestsvlrequest,ServletResponsesvlresponse,FilterChainchain)throwslOException,ServletException(//将Servlet请求与响应对象转换成HttpServlet请求与响应对象HttpServletRequestrequest=(HttpServletRequest)svlrequest;HttpServletResponseresponse=(HttpServletResponse)svlresponse;//获得请求的方式(1.postor2.get),根据不同请求方式进行不同处理Stringmethod=request.getMethod();//1.以post方式提交的请求,直接设置编码为UTF-8if(method.equalsIgnoreCase("post"))(try(request.setCharacterEncoding("UTF-8");}catch(UnsupportedEncodingExceptione)(e.printStackTrace();}}//2.以get方式提交的请求else(//取出客户提交的参数集Enumeration<String>paramNames=request.getParameterNames();//遍历参数集取出每个参数的名称及值while(paramNames.hasMoreElements())(Stringname=paramNames.nextElement();//取出参数名称Stringvalues[]=request.getParameterValues(name);//根据参数名称取出其值//如果参数值集不为空if(values!=null)(//如果参数值集中只有一个值if(values.length==1)(try(//调用toUTF(values[0])函数,(values[0]即第一个参数值)方法转换参数值的字元编码Stringvlustr=toUTF(values[0]);//并将该值以属性的形式藏在requestrequest.setAttribute(name,vlustr);}catch(UnsupportedEncodingExceptione)(e.printStackTrace();}}//如果参数值集中有多个值else(//遍历参数值集for(inti=0;i<values.length;i++)(try(//回圈依次将每个值调用toUTF(values[i])方法转换参数值的字元编码Stringvlustr=toUTF(values[i]);values[i]=vlustr;}catch(UnsupportedEncodingExceptione)(e.printStackTrace();}}//将该值以属性的形式藏在requestrequest.setAttribute(name,values);}}//设置响应方式和支持中文的字元集response.setContentType("text/html;charset=UTF-8");//继续执行下一个filter,无一下个filter则执行请求chain.doFilter(request,response);}/***销毁方法*/publicvoiddestroy()(}}过滤器部分,可用来处理页面提交的post和get方法产生的中文乱码问题。Post方式提交的数据(form表单中提交的数据)只需要进行请求字符编码设置request.setCharacterEncoding("UTF-8");和响应设置response.setContentType("text/html;charset=UTF-8");设置就可以了。Get方式提交的数据会包含在url中,(如:leavesp?work=部门主管审批),则需要取出参数名:Enumeration<String>paramNames=request.getParameterNames();(如:work)和取出参数值:Stringvalues[]=request.getParameterValues(name);(如:部门主管审批),然后再将参数值进行编码转换:outStr=newString(inStr.getBytes("iso-8859-1"),"UTF-8");过滤器写好这后就需要到web.xml中<web-app>与〈/web-app>之间进行配置了,web.xml中配置如下:<!--配置过滤器--><filter>description>处理中文乱码过滤器</description>filter-name>ProFilter</filter-name>filter-class>com.util.filters.ProFilter</filter-class></filter><filter-mapping>filter-name>ProFilter</filter-name>url-pattern>*</url-pattern><!--过滤所有请求,注:tomcat5请用/*--></filter-mapping>这样配置之后只要页面有任何请求都会通过ProFilter进行中文处理了,就不会再发生中文乱码问题了。那一串通过get传递过来的中文处理过程如下:在jsp页面的JavaScript里面进行编码处理:url=encodeURI(‘leavesp?work=部门主管审批’)编码后结果:url=leavesp?work=%E9%83%A8%E9%97%A8%E4%B8%BB%E7%AE%A1%E5%AE%A1%E6%89%B9因为在web.xml过滤器配置为<url-pattern>*</url-pattern>所以所有请求将会通过过滤器进行处理,此过滤器处理过程如下:2.1获得参数名集合:Enumeration<String>paramNames=request.getParameterNames();Stringname=paramNames.nextElement();2.1结

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论