<%@ page contentType="text/html; charset=gb2312"%> JSP-数据库中文乱麻问题
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
JSP-数据库中文乱麻问题
     发布者:liu0909 发布时间:2006-09-08
JSP页面乱码问题及解决方法:
1、页面中文显示为无规则乱码。在JSP页面中指定编码的方式。
   <%@ page contentType="text/html"; charset=gb2312"%>
   这样对于不同的应用服务器和JDK,都不会出现乱码问题。
2、中文显示为多个问号。这是因为浏览器默认使用UTF-8编码方式来发送页面请求。可以通过一个字符编码的函数来解决,把请求通过iso-8859-1来编码。如例:
  <%@ page contentType="text/html;charset=gb2312"%>
  <%@ page import="java.io.*" %>
  <%!String trans(String chi)
    {
        String result=null;
        byte temp[];
        try{
             temp=chi.getBytes("iso-8859-1");
             result=new String(temp);
        }catch(UnsupportedEncodingException e)
        {
           System.out.println(e.toString());
        }
        return result;
     }
   %>
   <%
       out.println(trans(request.getParameter("name")));
   %>
3、 比2更简单的方法,在页面中加入:
    request.setCharacterEncoding("gb2312");

向数据库存取数据出现乱码,解决方法如下:
1 首先要弄一个过滤器来对页面中的提交的数据进行过滤,也就是转换为UTF-8的编码
  修改web.xml配置文件,加入如下代码
  <filter>
      <filter-name>Set Character Encoding</filter-name>
      <filter-class>filter.SetCharacterEncodingFilter</filter-class>
      <init-param>
      <param-name>encoding</param-name>
         <param-value>UTF-8</param-value>
      </init-param>
   </filter>
   <filter-mapping>
      <filter-name>Set Character Encoding</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
 当然,filter.SetCharacterEncodingFilter类应当拷贝到相应目录下。(此类内容见附录)
2 修改其中的连接数据库部份。(以mysql为例)
原:
jdbc:mysql://localhost:3306/addressbook
现:
jdbc:mysql://localhost:3306/addressbook?useUnicode=true&amp;characterEncoding=GBK
使用编码为GBK的方式连接数据库,也可以使用GB2312或是UTF-8,但UTF-8也会出现乱码,不知是何原因。这3种方式大家可以逐个测试。
现在只能使用GBK或是GB2312而且jdbc也只能使用3.0.10,我试过最新的3.0.18也是乱码。
  
3 现在数据库中和页面中应该都显示正常了,如果页面还是乱码,可试一下如下方法:
  out.println("<td>"+ new String(abook.getName().getBytes("ISO-8859-1"), "GB2312") + "</td>");
  out.println("<td>"  + new String(abook.getPhone().getBytes("ISO-8859-1"), "GB2312") + "</td>");
  out.println("<td>"+ new String(abook.getAddress().getBytes("ISO-8859-1"), "GB2312") +"</td>");

附:
================================================================================================================
package filter;
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;
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 {
        // Conditionally select and set the character encoding to be used
        if (ignore || (request.getCharacterEncoding() == null)) {
            String encoding = selectEncoding(request);
            if (encoding != null)
                request.setCharacterEncoding(encoding);
        }
 // Pass control on to the next filter
        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);
    }

}
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
致JAVA初学者+如何下手学JAVA
Java学习之类的属性
Java学习之值传递
XML在分布式系统中的作用
领域模型驱动设计(DDD)之模型提炼
Java虚拟机(JVM)的动态类加载
 
最近评论:
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(4711)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(89)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(832)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号