tomcat中文问题

<script language=javascript type=text/javascript> </script>
   解决在 tomcat5。0下编写web应用的

中文问题
 
一、                 JSP 页面乱码(中文显示为问号)

   现象: JSP 页面生成的中文数据在浏览器端显示为乱码,但是静态 HTML 代码中文则显示正常。
 
原因: TOMCAT5 0 JSP 页面的默认编码方式是 ISO-8859-1 ,在动态生成的 HTML 代码时按照 ISO-8859-1( 西欧字符 ) 编码,所以显示中文时全部为问号。
 
解决方法:在所有的 JSP 页面里加上
   <%@ PAGE CONTENTTYPE=”TEXT/HTML;CHARSET=GB2312”>
TOMCAT5.0 在解析 JSP 页面的时会将编码方式改为 GB2312 ,这时中文显示正常。
 
 
二、                 INCLUDE 进来的 JSP 页面的中文乱码
     
        现象:外层 JSP 页面的中文显示正常,但 INCLUDE 进来的 JSP 页面(内层页面)的中文显示乱码。
       
        原因:在外层的 JSP 页面中用上面 < > 中的方法处理之后,外层的 JSP 页面正确的按照 GB2312 的编码方法解析,但内层(即 INCLUDE 进来的 JSP 叶面)还是按照 TOMCAT 的默认编码方式 ISO-8859-1 方式编码,所以造成内层页面的中文显示不正常。
 
解决方式:同上, 在所有的内层 JSP 页面里加上
   <%@ PAGE CONTENTTYPE=”TEXT/HTML;CHARSET=GB2312”> ,中文显示即可恢复正常。
 
注:同一个 JSP 页面中不能出现两个
            <%@ PAGE CONTENTTYPE=”TEXT/HTML;CHARSET=GB2312”>
 
 
 
三、                 POST 方式提交的表单数据中的中文乱码
             
         现象:用 POST方式提交的表单数据出现乱码。

      原因:Tomcat在接收到请求后,并没有能够根据request中的信息设置正确的编码方式,而是采用默认编码方式ISO-8859-1编码,所以提交的表单中文数据全部为问号。

      解决:可以添加一个设置字符集的过滤器,将request中的编码方式改为GB2312,TOMCAT就
能正确的将 POST方式提交的数据编码。过滤器的内容如下:
package filters;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;

public class SetCharacterEncodingFilter implements Filter {
  protected String encoding = null;
  protected FilterConfig filterConfig = null;
  protected boolean ignore = true;

  public void destroy() {
   this .encoding = null;
   this .filterConfig = null;
  }

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {

  // 设置正确的编码方式
  if (ignore || (request.getCharacterEncoding() == null)) {
   String encoding = selectEncoding(request);
   if (encoding != null)
    request.setCharacterEncoding(encoding);
  }

  // 传递到下一层过滤器
  chain.doFilter(request, response);

}

public void init(FilterConfig filterConfig) throws ServletException {

  this .filterConfig = filterConfig;
  this .encoding = filterConfig.getInitParameter( "encoding" );
  String value = filterConfig.getInitParameter( "ignore" );
  if (value == null)
   this .ignore = true;
  else if (value.equalsIgnoreCase( "true" ))
   this .ignore = true;
  else if (value.equalsIgnoreCase( "yes" ))
   this .ignore = true;
  else
   this .ignore = false;

}

protected String selectEncoding(ServletRequest request) {
  return (this.encoding);
}

}

  编好了过滤器之后,还要在TOMCAT中配置过滤器。
    打开WEB-INF目录下的web.xml文件,添加下面的内容:
filter
 < filter-name Set Character Encoding /filter-name
 < filter-class filters.SetCharacterEncodingFilter /filter-class
 < init-param
  < param-name encoding /param-name
  < param-value GB2312 /param-value
 < /init-param
/filter

filter-mapping
 < filter-name Set Character Encoding /filter-name
 < url-pattern /* /url-pattern
/filter-mapping
 
 
四、                 JAVASERVLET 中输出的中文乱码
 
 
现象:在 JAVASERVLET 中用 PRINTWRITER 输出的中文乱码 . ,浏览器接收的 HTML 数据的编码方式为 ISO-8859-1( 西欧字符 ) 这时如果在浏览器端手动的将页面的编码方式改为 GB2312 GBK 则页面的中文显示正常。
 
 
  原因: TOMCAT5 0 页面的默认编码方式是 ISO-8859-1 ,浏览器在收到由 JSP 页面生成的 HTML 数据时也会将 HTML 的数据的编码方式设为 ISO-8859-1, 所以造成页面上的中文字符显示为乱码。
 
 
         解决方法:
 
如下面这段代码 :
 
 PrintWriter out   = response.getWriter();
 out.println("<html>");
 out.println("<head>");
 out.println("</head>");
 out.write(“ 错误!可能是由于信息已过期!! ”);
          out.println("</html>");
         首先输出是要将response reset,这个我也不知道什么原因,reset后在按照下面的方式处理。
         然后 要告诉浏览器该页面要以什么方式编码,添加。
                                                response.setContentType("text/html;charset=GB2312");
 
告诉浏览器 HTML 数据的编码是 GB2312 ,再将输出的每一句中文改为以 ISO-8859-1 编码方式编码,改完后整个代码如下:
            response.reset();
            response.setContentType("text/html;charset=GB2312");
            out.println("<html>");
            out.println("<head>");
            out.println("</head>");
            out.write(new String(" 错误!可能是由于信息已过期!! ".getBytes(),"ISO-8859-1"));
out.println("</html>");
 
这时输出的中文就能正确的显示了。
 
 
五.                 在资源文件中的中文数据输出到 JSP 页面上为乱码
  
  现象:用 <BEAN WRITE> 标签在 JSP 页面上输出预先已编入资源文件的中文信息时显示为乱码。
 
         原因:编入资源文件的信息如果不是西欧字符就必须用 NATIVE2ASCII 工具将其编码方式改为 ASCII 编码方式。
        
         解决方法: NATIVE2ASCII JDK 自带的工具,在    你的 JDK 目录 /BIN  目录下。其使用方法如下
               
APP.RES 是正常的可看的中文资源文件
                APPLICATIONRESOURCES.PROPERTIES 要生成的能正常显示的资源文件
               
                NATIVE2ASCII APP.RES APPLICATIONRESOURCES.PROPERTIES
        
         转换完毕后,使用 <BEAN:WRITE> 标签输出的中文信息就能正确的显示了。
<script language=javascript type=text/javascript> </script> wan
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值