知识库

推荐内容

快逸做的更好

产品优势

您的位置: 首页 > 知识库 > 设计基础 > 各种乱码问题解决方案

各种乱码问题解决方案

快逸客户的需求是各种样式的,但乱码问题是总会遇到的,下面整理下各种乱码问题的解决办法,供客户使用解决处理请求编码问题。浏览器于程序之间进行数据传输时,默认的编码是ISO-8859-1。如果数据是其他编码方式,到达目的后就会出现乱码,需要进行转换。有以下几种解决方案,供参考。

注意:不要重复使用多个方案解决同一位置的问题。

页面显示:

jsp中

  1. <%@ page contentType=”text/html; charset=GB2312″%>
  2. <HEAD><META HTTP-EQUIV=”Content-Type” CONTENT=”text/html; charset=GB2312″></HEAD>
  3. 响应结果的编码设置:Servlet 中response.setContentType(“text/html;charset=GB2312″);

页面输入正确显示,进入servlet或action中乱码:

默认情况下,IE浏览器发送请求是用”ISO-8859-1″字符编码,遇到用户用中文数据,要进行转码。

  1. 先在jsp页面设置httpServletRequest对象的字符编码:<request.setCharacterEncoding(“gb2312″);>
  2. 还有一种办法使用对String类型的数据进行编码转换,可以在程序任何位置进行:public String convertEncode(String str){  if (str!=null){  str = new String(str.getBytes(“ISO-8859-1″),”GB2312″);  }

     }

  3. 使用filter
    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;
    import javax.servlet.http.HttpServletRequest;
    /**
    * @Description: set Character encoding in project
    */
    public class CharsetFilter implements Filter{
    /**
    * @param “GBK”
    * the format of character while get and post int net
    */
    public void doFilter (ServletRequest sRequest, ServletResponse sResponse, FilterChain fChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest)sRequest;
    request.setCharacterEncoding(“GBK”);fChain.doFilter(sRequest, sResponse);
    }

    public void init (FilterConfig sConfig) throws ServletException {
    }

    public void destroy () {
    }
    }

处理数据库编码:

  1. 安装数据库设置编码字符集
  2. 如果数据库字符编码为”GB2312″,直接读取,如果是”ISO-8859-1″,数据进行编码转换,
    ArrayList list = new ArrayList();
    Connection conn = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;
    String sql = “select lessonId,lessonName,examTime,questionNum,totalScore from exam.exam_lesson”;
    conn = DBConnection.getConnection();
    try {
    stmt = conn.prepareStatement(sql);
    rs = stmt.executeQuery();
    while (rs.next()){
    LessonBean lb = new LessonBean();
    String lessonName = rs.getString(“lessonName”);
    String lesson_name = new String(lessonName.getBytes(“ISO-8859-1″),”GB2312″);
    list.add(lb);
    }
    } catch (Exception e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    }
  3. 如果使用数据库连接池,需要在url的标签指明编码方式:

    报表样式" href="http://www.quiee.com.cn/wp-content/uploads/2008/07/luanma1.png">luanma1.png

    luanma2.png

    处理eclipse编码:工具栏–窗口–首选项 ,打开对话框,在树状结构中打开工作台,选择编辑器,把文本文件编码选项设置成需要的字符集。
    常见问题:jsp 页面已经设置<%@ page contentType=”text/html; charset=GB2312″%>表单提交后 在servlet中仍然乱码<form action = “” method=”post” >表单method属性值是get或没有设置method属性

本文标签:
发布日期:2008/07/28
本文分类: 设计基础