JSP开发中文乱码问题

文章主要针对Tomcat中JSP开发容易出现的中文乱码问题。

1、JSP中输出中文的乱码问题

      JSP输出中文,即直接在JSP中输出中文,或者给变量赋中文值再输出等。

原因:

      这种情况下的乱码问题往往是因为没有给JSP页面制定显示字符的编码方式。

解决:

      在JSP页面头部加上语句<%@ page contentType="text/html; charset=utf-8" %>(在Servlet页面中使用http.ServletResponse.setContentType("text/html; charset=gbk")),最好同时在JSP页面的<head>部门加上<meta http-equiv="Content-Type" content="text/html;charset=utf-8">

 

2、获取表单提交的数据时(POST方式)

代码如下:

  1. <!-- radiocheck.jsp -->   
  2. <%@ page contentType="text/html; charset=utf-8" language="java" %>   
  3.   
  4. <html>   
  5.     <head>   
  6.         <meta http-equiv="Content-Type" content="text/html;charset=utf-8">   
  7.         <title>单选按钮与复选框</title>   
  8.     </head>   
  9.        
  10.     <body>   
  11.         <%   
  12.             String str1=request.getParameter("radiobutton");   
  13.             String str2[]=request.getParameterValues("check");   
  14.             if(str1!=null && str2!=null)   
  15.             {   
  16.               //str1=new String(str1.getBytes("ISO-8859-1"),"utf-8");   
  17.                 out.println("你经常使用的是"+str1+"上网<br>");   
  18.                 out.println("经常上网的地方是:");   
  19.                 if(str2!=null)   
  20.                 {   
  21.                     for(int i=0; i<str2.length; i++)   
  22.                     {   
  23.                         out.println(str2[i]+" ");   
  24.                     }   
  25.                 }   
  26.             }   
  27.          %>   
  28.             
  29.          <form name="form1" method="post" action="">   
  30.             <p>你使用什么方式上网</p>   
  31.             <p><input name="radiobutton" type="radio" value="ASDL" checked>ASDL</p>   
  32.             <p><input name="radiobutton" type="radio" value="拨号上网">拨号上网</p>   
  33.             <p><input name="radiobutton" type="radio" value="无线接入">无线接入</p>   
  34.             <p><input name="radiobutton" type="radio" value="DDN专线">DDN专线</p>   
  35.             <p>你经常在什么地方上网</p>   
  36.             <p><input name="check" type="checkbox" value="home">home</p>   
  37.             <p><input name="check" type="checkbox" value="school">school</p>   
  38.             <p><input name="check" type="checkbox" value="Internet Bar">Internet Bar</p>   
  39.             <p><input name="submit" type="submit" value="Submit"></p>   
  40.          </form>   
  41.     </body>   
  42. </html> 

 

原因:      

      在没有加任何其它处理之前,用request.getParameter(paramName) 获取表单提交中的数据,且表单数据中含有中文时,返回的字符串会出现乱码。出现这种情况的原因是Tomcat的J2EE实现对表单提交,即以POST方式提交的参数采用默认的ISO-8859-1来处理。

解决:

方法一:

      不修改其他设置,只是在将表单中的中文数据提取出来后再转换编码。

      例如:代码中对于String str1=request.getParameter("radiobutton");进行转换编码语句如下:

         str1=new String(str1.getBytes("ISO-8859-1"),"utf-8");

      这种方法只是从一个局部来考虑,如果这样的地方太多,就不得不将这条语句重复写很多次,在比较大的项目中,就需要用方法二。

方法二:

      使用过滤器(filter),即让对所有页面的请求都通过一个Filter,将处理字符集设置为utf-8。具体做法如下:在Tomcat的/webapps/examples/(如:F:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/examples/WEB-INF/classes/filters)有一个完整的例子,也可以参考其中web.xml和SetCharacterEncodingFilter的配置。

        A:首先将%Tomcat%/webapps/examples/WEB-INF/classes/filters/目录下的文件SetCharacterEncodingFilter.java拷贝到自己Eclipse工程下的src文件里,同时要修改其中的包packet路径,改成正确的packet路径。

        B:然后将web.xml文件<web-app>后面添加如下代码:

 

Xml代码

 

  1. <filter>  
  2.     <filter-name>SetCharacterEncoding</filter-name>  
  3.     <filter-class>com.b2b.alibaba.SetCharacterEncodingFilter</filter-class>  
  4.     <init-param>  
  5.         <param-name>encoding</param-name>  
  6.         <param-value>utf-8</param-value>  
  7.     </init-param>  
  8. </filter>  
  9.   
  10. <filter-mapping>  
  11.     <filter-name>SetCharacterEncoding</filter-name>  
  12.     <url-pattern>/*</url-pattern>  
  13. </filter-mapping>  

3、URL中的中文问题(GET请求)

      对于直接通过URL 中传递中文参数,如“http://localhost:8080/liuxl/jsp/radiocheck.jsp?str1=中文”这样的GET请求,在服务端用request.getParameter("paramName")时返回的是乱码。按以上的两种方法都不管用。

例如:     

      代码同上,只需将<form name="form1" method="post" action="">修改成 <form name="form1" method="get" action="">即可。

原因:

      Tomcat中以GET方式提交的请求对query-string处理时采用了和POST不一样的处理方式。

解决:

      打开Tomcat安装目录下的/conf/server.xml文件(如:F:/Program Files/Apache Software Foundation/Tomcat 6.0/conf/server.xml),找到Connector块,往其中添加URIEncoding="utf-8",添加后完整的Connector块代码如下:

 

 

Xml代码

<Connector port="8080" protocol="HTTP/1.1"    

  1.            maxThreads="150" connectionTimeout="20000"    
  2.            redirectPort="8443" URIEncoding="utf-8" />  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值