您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > jsp乱码解决方案大全
行到水穷处,坐看云起时。从善如登,从恶如崩。战无不胜,攻无不克。黯然销魂者,惟别而已矣。西塞山前白鹭飞,桃花流水鳜鱼肥。一、JSP页面显示乱码下面的显示页面(display.jsp)就出现乱码:htmlheadtitleJSP的中文处理/titlemetahttp-equiv=Content-Typecontent=text/html;charset=gb2312/headbody%out.print(JSP的中文处理);%/body/html对不同的WEB服务器和不同的JDK版本,处理结果就不一样。原因:服务器使用的编码方式不同和浏览器对不同的字符显示结果不同而导致的。解决办法:在JSP页面中指定编码方式(gb2312),即在页面的第一行加上:%@pagecontentType=text/html;charset=gb2312%,就可以消除乱码了。完整页面如下:%@pagecontentType=text/html;charset=gb2312%htmlheadtitleJSP的中文处理/titlemetahttp-equiv=Content-Typecontent=text/html;charset=gb2312/headbody%out.print(JSP的中文处理);%/body/html二、表单提交中文时出现乱码下面是一个提交页面(submit.jsp),代码如下:htmlheadtitleJSP的中文处理/titlemetahttp-equiv=Content-Typecontent=text/html;charset=gb2312/headbodyformname=form1method=postaction=process.jspdivalign=centerinputtype=textname=nameinputtype=submitname=Submitvalue=Submit/div/form/body/html下面是处理页面(process.jsp)代码:%@pagecontentType=text/html;charset=gb2312%htmlheadtitleJSP的中文处理/titlemetahttp-equiv=Content-Typecontent=text/html;charset=gb2312/headbody%=request.getParameter(name)%/body/html如果submit.jsp提交英文字符能正确显示,如果提交中文时就会出现乱码。原因:浏览器默认使用UTF-8编码方式来发送请求,而UTF-8和GB2312编码方式表示字符时不一样,这样就出现了不能识别字符。解决办法:通过request.seCharacterEncoding(gb2312)对请求进行统一编码,就实现了中文的正常显示。修改后的process.jsp代码如下:%@pagecontentType=text/html;charset=gb2312%%request.seCharacterEncoding(gb2312);%htmlheadtitleJSP的中文处理/titlemetahttp-equiv=Content-Typecontent=text/html;charset=gb2312/headbody%=request.getParameter(name)%/body/html三、数据库连接出现乱码只要涉及中文的地方全部是乱码,解决办法:在数据库的数据库URL中加上useUnicode=true&characterEncoding=GBK就OK了。四、数据库的显示乱码在mysql4.1.0中,varchar类型,text类型就会出现中文乱码,对于varchar类型把它设为binary属性就可以解决中文问题,对于text类型就要用一个编码转换类来处理,实现如下:publicclassConvert{/**把ISO-8859-1码转换成GB2312*/publicstaticStringISOtoGB(Stringiso){Stringgb;try{if(iso.equals()||iso==null){return;}else{iso=iso.trim();gb=newString(iso.getBytes(ISO-8859-1),GB2312);returngb;}}catch(Exceptione){System.err.print(编码转换错误:+e.getMessage());return;}}}把它编译成class,就可以调用Convert类的静态方法ISOtoGB()来转换编码。如果你还有什么不懂之处:我给大家推荐一个好的JSP-JAVA网站:总结:1.在jsp中%@pagecontentType=text/html;charset=A%如果指定了,那么在改jsp中所有构造的String(不是引用),如果沒有指定编码,那么这些String的编码是A的。从request的得到的String如果沒有指定request的编码的话,他是iso-8859-1的从别的地方得到的String是使用原來初始的编码的,比如从数据库得到String,如果数据库的编码是B,那么该String的编码是B而不是A的,也不是系统默认的。此时,如果要输出的String的编码不是A,那么,很可能显示乱码的,所以首先要将String正確转化为编码A的String,然后输出。2.在jsp中%@pagecontentType=text/html;charset=A%沒有指定,那么相当于指定了%@pagecontentType=text/html;charset=ISO-8859-1%3.Servelte中如果执行了像response.setContentType(text/html;charset=A);説明将response的字符输出流编码设置为A,所有要输出的String的编码要转化为A的,否則会得到乱码的。Servelet中从request得到的String的编码和jsp中一样的,但是在servletjava文件中构造的String是使用的系统默认的编码的。在servelt中从外部得到的String是使用原来的编码的,比如从编码为B的数据库得到的数据是编码为B的,不是A,也不是系统默认的编码。//////////////////////////////////////////////////////////////////////////////////////////转载:JSP中文乱码问题解决方法小结在使用JSP的过程中,最使人头疼的一个问题就是中文乱码问题,以下是我在软件开发中遇到的乱码问题以及解决方法。1、JSP页面乱码这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面代码指定字符集编码即可,2、数据库乱码这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下:在数据库连接字符串中加入编码字符集StringUrl=jdbc:mysql://localhost/digitgulf?user=root&password=root&useUnicode=true&characterEncoding=GB2312;并在页面中使用如下代码:response.setContentType(text/html;charset=gb2312);request.setCharacterEncoding(gb2312);3、中文作为参数传递乱码当我们把一段中文字符作为参数传递个另一页面时,也会出现乱码情况,解决方法如下:在参数传递时对参数编码,比如RearshRes.jsp?keywords=+java.net.URLEncoder.encode(keywords)然后在接收参数页面使用如下语句接收keywords=newString(request.getParameter(keywords).getBytes(8859_1));4、JSP页面乱码加这句%@pagecontentType=text/html;charset=gb2312language=javaimport=java.sql.*errorPage=err.jsp%/////////////////////////////////////////////////////////////////////////////////////////JSP/JDBCMySQL乱码问题~~~作者:佚名来源:本站整理发布时间:2005-7-112:24:30綠起:JSP的request默认为ISO8859_1,所以在处理中文的时候,要显示中文的话,必须转成GBK的,如下Stringstr=newString(request.getParameter(name).getBytes(ISO8859-1),GBK);out.println(str);这样就可以显示中文了MYSQL操作时的中文问题:这个要看MySQL的默认编码了,一般不调整的话为latin1其实和ISO8859_1一样,所以操作的时候要处理和他一致,不然就会乱码的1.插入中文:Stringsql2=INSERTINTOtest(name)VALUES('+request.getParameter(name)+');stmt.executeUpdate(sql2);不用编码就可以插入了2.显示插入的中文:因为存入的是latin,所以显示的时候就要GBK一下Stringx=newString((rs.getString(title)).getBytes(ISO8859_1),GBK);out.println(x);3.设定存储编码:当然在MySQL为latin1编码时,也可以存的时候用GBK了Connectioncon=DriverManager.getConnection(jdbc:mysql://localhost:3306/jsp?useUnicode=true&characterEncoding=GBK,root,);str1=中文;Stringsql2=INSERTINTOtest(name)VALUES('+str1+');这样也可以很成功的插入了,呵呵////////////////////////////////////////////////////////////////////////////////////////JSP/Servlet中的汉字编码问题(作者:张建芳,转自IBMDeveloperWorks中国网站2001年04月18日15:08)网上就JSP/Servlet中DBCS字符编码问题有许多优秀的文章和讨论,本文对它们作一些整理,并结合IBMWebSphereApplicationServer3.5(WAS)的解决方法作一些说明,希望它不是多余的。1.问题的起源每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的ASCII,中国的GB2312-80,日本的JIS等,作为该国家/区域内信息处理的基础,有着统一编码的重要作用。字符编码集按长度分为SBCS(单字节字符集),DBCS(双字节字符集)两大类。早期的软件(尤其是操作系统),为了解决本地字符信息的计算机处理,出现了各种本地化版本(L10N),为了区分,引进了LANG,Codepage等概念。但是由于各个本地字符集代码范围重叠,相互间信息交换困难;软件各个本地化版本独立维护成本较高。因此有必要将本地化工作中的共性抽取出来,作一致处理
本文标题:jsp乱码解决方案大全
链接地址:https://www.777doc.com/doc-4458198 .html