zoukankan      html  css  js  c++  java
  • jsp中文乱码六种情况---解决方案

    jsp中文乱码六种情况---解决方案

    来源:http://blog.csdn.net/lovesummerforever/article/details/12290319 


     乱码是让人头疼的一件事情,您是否和我一样也遇到过这样的情况,向数据库中添加一条记录,记录是添加上了,到数据库里一看,数据凌乱了。。。顿时我也凌乱了。。。把html文件改为jsp文件,添加了一下jsp page指令重新打开同时发现所有的中文都七十二变了。。是否。。下面我们就一起看看Java web中的中文乱码问题。

     

     

    1、JSP页面出现的中英文乱码:

            我们的PageCharset.jsp页面代码如下所示:

    [html] view plain copy
     print?
    1. <%@ page language="java" import="java.util.*"%>  
    2.     
    3. <html>  
    4. <head>  
    5.   
    6. <title>中文显示示例</title>  
    7. </head>  
    8.   
    9. <body>  
    10.     中文显示的示例。  
    11.     <%  
    12.         out.print("这里是用jsp输出的中文");  
    13.      %>  
    14. </body>  
    15. </html>  


            当我们在保存我们的文件的时候会出现下面的提示:

     


            整因为在我们的MyEclipse中默认的编码为ISO-8859-1,而ISO-8859-1不支持中文的编码,所以jsp页面代码如果出现中文就不能保存了。对于这样的错误,我们只要在页面上加上支持中文的编码格式就可以了,在jsp页面中加上pageEncoding=“gb2132” 支持中页面的编码格式就可以了。这样我们就能正常保存我们的jsp源文件了。

     

     

     

    2、URL传递参数中文乱码

     

    [html] view plain copy
     print?
    1. <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>  
    2.     
    3. <html>  
    4. <head>  
    5.   
    6. <title>URL传递参数中英文处理示例</title>  
    7. </head>  
    8.     <%  
    9.         String param = request.getParameter("param");  
    10.      %>  
    11. <body>  
    12.     <a href="URLCharset.jsp?param='中文'">请单击这个链接</a>  
    13.     您提交的这个参数为:<%=param %>  
    14. </body>  
    15. </html>  


     

            启动tomcat运行结果出现url传递的中文乱码:

     

            这里我们需要配置tomcat服务器文件,才能解决这个问题。具体方法是,在tomcat的conf目录下找到server.xml配置文件,找到如下代码

    [html] view plain copy
     print?
    1. <span style="font-size:18px">  <Connector port="8080" protocol="HTTP/1.1"  
    2.                connectionTimeout="20000"  
    3.                redirectPort="8443"  /></span>  


            在后面添加上编码方式,URIEncoding="gb2312" 重新启动tomcat问题就解决了。

     

     

     

    3、表单提交中问乱码

            对于表单中提交的数据,可以用request.getPraramter("");方法来获取,但是当表单中出现中文数据的时候就会出现乱码。

            我们的提交表单的页面,FormCharset.jsp页面如下:

    [html] view plain copy
     print?
    1. <%@ page language="java" contentType="text/html; charset=GB18030"  
    2.     pageEncoding="GB18030"%>  
    3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    4. <html>  
    5. <head>  
    6. <meta http-equiv="Content-Type" content="text/html; charset=GB18030">  
    7. <title>Form中文处理示例</title>  
    8. </head>  
    9. <body>  
    10.     下面是表单内容:  
    11.     <form action="AcceptFormCharset.jsp" method="post">  
    12.         用户名:<input type="text" name="userName" size="10" />  
    13.         密    码:<input type="password" name="password" size="10"/>  
    14.         <input type="submit" value="提交"/>  
    15.     </form>  
    16. </body>  
    17. </html>  


            我们的AcceptFormCharset.jsp页面:

    [html] view plain copy
     print?
    1. <%@ page language="java" contentType="text/html; charset=GB18030"  
    2.     pageEncoding="GB18030"%>  
    3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    4. <html>  
    5. <head>  
    6. <meta http-equiv="Content-Type" content="text/html; charset=GB18030">  
    7. <title>Form中文处理示例</title>  
    8. </head>  
    9. <body>  
    10.     下面是表单提交以后request取到的表单的数据:<br>  
    11.     <%  
    12.         out.println("表单输入的userName值为:" + request.getParameter("userName") +"<br>");  
    13.         out.println("表单输入的pasword值为:" +request.getParameter("password") + "<br>");  
    14.      %>  
    15. </body>  
    16. </html>  


     

            提交表单:

     

            结果如下:

     

            我们看到我们在表单中的中文数据出现了乱码,为什么楚翔这种情况呢?是因为我们的tomcat中,对于以post方式提交的表单编码格式默认为ISO-8859-1的编码格式,而这种编码格式是不能编码中文的,所以就会出现乱码的现象了。对于这种情况,我们可以对表单中的数据进行处理,在取得表单参数的时候设置编码方式,我们更改了我们的接受表单数据的页面如下所示:

     

    [html] view plain copy
     print?
    1. <%  
    2.     String userName = request.getParameter("userName");  
    3.     String passWord = request.getParameter("password");  
    4.     out.println("表单输入的userName值为:" +  new String(userName.getBytes("ISO-8859-1"),"gb2312")+"<br>");  
    5.     out.println("表单输入的pasword值为:" + new String(passWord.getBytes("ISO-8859-1"),"gb2312")+"<br>");  
    6.  %>  


            这样就得到我们想要的效果啦:

     

     

     

     

     4、数据库操作中文乱码

            我们在建立数据库的时候,最好是能选择支持中文编码格式,最好是能和jsp页面编码格式保持一致,这样就尽可能的减少数据库操作中文乱码的问题,最开始的连接数据库的时候,编写好数据库的编码策略,也就是使用这种形式的URL:jdbc:Oracle:thin:@localhost:1521:TEST;userEnicode=true;characterEncoding=gb2312; 这样我们选择的数据库的编码和我们的jsp编码就一致了。

     

    写入到数据库的时候,数据库中中文乱码:

            但是如果我们在最开始的时候没有对数据库的编码进行设置,并且我们的数据库中已经有大量的数据的话,我们再向数据库中写入中文数据,数据库中的中文显示为乱码。在写入数据的时候出现乱码,是因为我们在处理表单的时候没有对字符的编码设置,对于这种情况,我们在jsp中或servlet中加入:

    rquest.setCharacterEncoding("gb2312");//处理表单请求的时候设置编码。

            这样再看我们的数据库,插入的中文字段就不会乱码了。

     

     

    从数据库中读出中文乱码:

            数据库中的中文出现乱码,就是在读取数据库的时候进行转码,这样显示就不会乱码了。我们整理这样的一个转码函数:

    public String encoder(String str) throws UnsupportedEncodingException

    {

               String result = new String(str.getBytes("ISO-ISO-8859-1)"),"gb2312");

    }

     

     

     

     

     

    5 在myeclipse开发工具中打开中文显示乱码

            在myeclipse中默认的编码方式为ISO-8859-1,所以打开有其他编译器编码的jsp页面就会出现乱码,是因为两个编译器保存源文件编码格式不同,在UltralEdit可以支持中文,但是在Eclipse对jsp文件的保存方式为ISO-8895-1,这种编码不支持中文,所以就会出现乱码。

            对于这种情况,我们可以更改myeclipse默认的编码方案,myeclipse->Window->Preferences->General->Content types->Test->JSP

     

            这样问题就解决啦!

     

     

     

     

    6 Filter批量设置编码格式

            我们对于每一个jsp或servlet我们都要设置编码格式,效率有些低,我们的servlet的Filter解决了我们的问题。在前篇写过Filter的解决中文乱码问题的文章,在这里就不赘述了。http://blog.csdn.NET/lovesummerforever/article/details/9924413 

            需要强调的一点,开始使用Java model1模型的时候,我们在web.xml中配置只需要配置好jsp页面就可以了,在model2模型中我们使用servlet作为控制器,我们就需要在Filter的配置文件web.xml中配置好servlet的设置,对所有的servlet处理的表单编码进行设置。

    [html] view plain copy
     print?
    1. <filter>  
    2.         <filter-name>CharsetEncodingFilter</filter-name>  
    3.         <filter-class>com.bjpowernode.drp.util.filter.CharsetEncodingFilter</filter-class>  
    4.         <init-param>  
    5.             <param-name>encoding</param-name>  
    6.             <param-value>GBK</param-value>  
    7.         </init-param>  
    8.     </filter>  
    9.     <filter-mapping>  
    10.         <filter-name>CharsetEncodingFilter</filter-name>  
    11.         <url-pattern>*.jsp</url-pattern>  
    12.     </filter-mapping>  
    13.   
    14.     <filter-mapping>  
    15.         <filter-name>CharsetEncodingFilter</filter-name>  
    16.         <url-pattern>/servlet/*</url-pattern>  
    17.     </filter-mapping>
        	</article>
    
    
    <!-- !empty($pre_next_article[0]) -->
    	</div>
  • 相关阅读:
    2018年10月22日-Python day1
    Python list(列表)功能详解
    剑指offer(4):重建二叉树
    剑指offer(3):从尾到头打印单链表
    剑指offer(2):替换空格
    机器学习实战:第九章 树回归
    ubuntu 中查找文件的命令
    关于 c++ primer plus 中valarray类使用例程的一个记录
    vim 最基本操作
    如何在VS2015中使用strcpy函数
  • 原文地址:https://www.cnblogs.com/jpfss/p/8961135.html
Copyright © 2011-2022 走看看