我在JSP文件里加的是<%@ page contentType="text/html;charset=GBK" %>和
String dbUrl="jdbc:mysql://localhost:3306/BookDB?useUnicode=true&characterEncoding=GBK";
我在安装MYSQL的时候选择的字符编码是gbk
在MYSQL里的查询能够显示中文(在命令行下的查询
但访问JSP文件的时候出现了如下的形式?·? ???????§ 
我也将字符编码改成过gb2312,但还是显示乱码··
谢谢各位!!

解决方案 »

  1.   

    在mysql的安装目录下找到my.ini 
    在里面找到:default-character-set= 将值改成gbk或gb2312或utf8都可以, 
    如下面: default-character-set=utf8
      

  2.   

    记得改好后重启mysql服务器。
      

  3.   

    先确定是哪个环节出问题了, 
     是数据库取出来就是乱码  ,
      还是jsp没正确显示,
    可以把从数据库取出的数据打印到后台看看
      

  4.   

    <%@ page contentType="text/html;pageEncoding="gb2312"  %>
    <%request.setEncoding("gb2312")%>  这个函数记不太清了。就是request设置编码  类型 以前遇到过类似问题
      

  5.   

    数据库取出正确,JSP显示不对··试了还是不行··
      

  6.   

    最常用的还是使用过滤器。<filter>
        <filter-name>Set Character Encoding</filter-name>
        <filter-class>包名+过滤器的类名</filter-class>
        <init-param>
          <param-name>encoding</param-name>
          <param-value>GBK</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>Set Character Encoding</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>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;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    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);      
     }
        }    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);  }}
      

  7.   

    自己写了一个试了试 ,你可以参考下  数据库 是  gb2312的编码
    <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
    <%@page import="java.sql.DriverManager"%>
    <%@page import="java.sql.Connection"%>
    <%@page import="java.sql.PreparedStatement"%>
    <%@page import="java.sql.ResultSet"%>
    <%@page import="java.sql.Statement"%>
    <%String stuAddr=null;

    try {
    Class.forName("com.mysql.jdbc.Driver");
    Connection conn  = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "root");
    String sql="SELECT stuID,stuName,stuSex,stuAddr FROM T_STUDENT WHERE stuName ='王'";
    Statement stmt=conn.createStatement();
    ResultSet rs = stmt.executeQuery(sql);
    while(rs.next()){
    stuAddr=rs.getString(4);}
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    </head>
    <%=stuAddr%>
    <body>
    </body>
    </html>
      

  8.   

    试试
    jdbc:mysql://localhost:3306/BookDB?useUnicode=true&amp;characterEncoding=GBK";如果不行的话,确认一下,你的tomcat用什么编码,可以在tomcat目录下的conf文件夹下的server.xml文件中查看,也可以修改为你想要的编码
      

  9.   

    在jsp页面里加上编码设置试试:
    request.setCharacterEncoding("GBK");
    response.setCharacterEncoding("GBK");
      

  10.   


    像他这样设置浏览器查看编码的格式 然后去TOMCAT里也设置一下编码格式 如果还是乱码的话你就先确认是在具体哪部分出现的乱码
      

  11.   

    从如下几方面查找原因吧1:mysql数据库编码设置的问题,my.ini中修改一下2:范围对象session,request设置的问题
      

  12.   

    我的代码就如下简单
    <%@ page import="java.io.*"%>
    <%@ page import="java.util.*"%>
    <%@ page import="java.sql.*"%>
    <%request.setCharacterEncoding("gb2312");%>  
    <%@ page language="java" contentType="text/html;charset=gb2312" pageEncoding="gb2312"%> 
    <html>
    <head
    </head>
    <body>
    <%
    try{
    Connection con=null;
    Statement stmt=null;
    ResultSet rs=null;
    String driver="com.mysql.jdbc.Driver";
    Class.forName(driver);
    String dbUrl="jdbc:mysql://localhost:3306/BookDB?useUnicode=true&characterEncoding=gb2312";
    String dbUser="root";
    String dbpwd="12345678";
    con=DriverManager.getConnection(dbUrl,dbUser,dbpwd);
    stmt=con.createStatement();
    rs = stmt.executeQuery("SELECT * from books");
    out.println("<table border=1 width=400>");
    out.println("<tr><th>编号</th><th>名字</th><th>标题</th></tr>");
    while (rs.next())
    {out.println("<tr>");
    out.println("<td>"+rs.getString("id")+"</td>");
    out.println("<td>"+rs.getString("name")+"</td>");
    out.println("<td>"+rs.getString("title")+"</td>");
    out.println("</tr>");
    }
    out.println("</table>");
    rs.close();
    stmt.close();
    con.close();
    }
    catch(Exception e)
    {out.println(e.getMessage());
    }
    %>
    </body></html>哪个高手好心的就加我QQ号给我讲哈嘛·前面的我试过了,应该是我有什么地方没注意到
    ·谢谢了··QQ:420074289(验证:小裙子)
    我才学,真的很不懂哦
    谢谢谢谢··
      

  13.   

    你的数据库已经是gb2312/gbk,所以原因不是数据库。改这个:jdbc:mysql://localhost:3306/BookDB?useUnicode=true&characterEncoding=gb2312成jdbc:mysql://localhost:3306/BookDB?useUnicode=true&amp;characterEncoding=GBK"; 保证连接时使用gbk/gb2312如果不行的话,确认一下,你的tomcat用什么编码,可以在tomcat目录下的conf文件夹下的server.xml文件中查看,也可以修改为你想要的编码注意:request/response对象是由web容器来“制造”的,所以当web容器的编码为gbk是, 可以不用request.setCharacterEncoding("GBK");这样的句子。如果你还是无法保证request的编码,那就再使用一个过滤器LZ好象没看我的答案
      

  14.   

    get方式 可以先编码再转码
      

  15.   


    import javax.servlet.*;    
    import java.io.IOException;    
       
    /**   
    * 用于设置 HTTP 请求字符编码的过滤器,通过过滤器参数encoding指明使用何种字符编码,用于处理Html Form请求参数的中文问题   
    */   
    public class CharacterEncodingFilter    
    implements Filter    
    {   
        public void init(){}
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{    
     
              request.setCharacterEncoding("GBK"); 
              response.setCharacterEncoding("GBK"); 
              chain.doFilter(request, response);    
    }    
       
       public void destroy(){}    
    }   在web.xml中配置:<filter>
    <filter-name>charset</filter-name>
    <filter-class>过滤器实现类的完全限定名</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>charset</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
      

  16.   

    参数接受的时候有问题的
    String aa=request.getParameter("aa");
    aa= new String("ISO-8859-1");这样写应该可以不过就是有点麻烦因为你接受的字段可能很多 
    另一种办法你可以写一个过滤器来处理乱码问题
    楼上有人写过过滤器了 我就不重复了
      

  17.   

    楼上:
    String aa=new String(request.getParameter("aa").getBytes("ISO-8859-1"),"gbk"); 
      

  18.   

    楼主的是前台乱码,和数据库没关系,前台记得过滤 request和response对象应该就好了,