我用的是NetBeans IDE 7.0.1,jdk1.6.0_10环境,在创建Java Web项目中JSP页面里中文显示乱码,具体代码如下:这个是新用户注册页面.jap <%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html" charset="gbk">
        <script language="JavaScript" type="text/JavaScript">... ...
</html>
   这是处理注册提交的表单页面.jsp
<%@page contentType="text/html"%>
<%@page language="java" import="java.sql.*"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<%
    request.setCharacterEncoding("GBK");
       ... ...//接受用户提交信息,并连接数据库等代码
%>
    然后运行注册页面,填注册信息,然后点提交都没错误,查看数据库中相应表时发现中文信息为乱码(我用的是mySQL,安装时候选的日本语那项即支持中文)。
        我想问的问题是设置整体JSP页面的字符集,设置提交表单中的中文编码,设置获得表单的中文编码等所用的语句是否一致??   <%@page contentType="text/html" pageEncoding="UTF-8"%>
         <%@page contentType="text/html;charset=gbk" %>
         <%@page contentType="text/html;charset=gb2312" %>
           request.setCharacterEncoding("GBK");
这些设置中文编码的语句该怎么用?怎么配合使用才可以不乱码?
请大家帮帮忙~~

解决方案 »

  1.   

    GBK是GB2312的扩展,这个是可以统一的。但是UTF-8是不一样的。建议所有的都使用统一的编码格式!而且在表单处理的时候,建议你设置一个filter,来控制你的字符编码,这样就不用每次都是设置编码格式了。
      

  2.   

    都用 UTF-8    JSP   数据库   
      

  3.   


    那到底是用UTF-8还是GBK呢?就是具体在jsp页面的第一句话该怎么写??
      

  4.   

    用楼上的试试,或者:
    当用request对象获取客户端提交的汉字信息,有时会出现乱码,所以对包含汉字的字符信息必须进行特殊的处理。首先,将获取的字符串用ISO-8859-1进行编码,并将编码存放到一个字节数组中,然后再将这个数据组转化为字符串对象即可。上面所述的处理过程如下所示:
         String str=request.getParameter(“ChineseWord”);
         byte b[]=str.getBytes(“ISO-8859-1”);
         str=new String(b);
      

  5.   

    <%@page contentType="text/html" pageEncoding="UTF-8"%>
      <%@page contentType="text/html;charset=UTF-8" %>
      <%@page contentType="text/html;charset=UTF-8" %>
      request.setCharacterEncoding("UTF-8");
    这样 都改成UTF-8
      

  6.   

    request.setCharacterEncoding("UTF-8");
    我也认为是这样的,要统一格式
      

  7.   


    我建议全部采用UTF-8来统一,这个应该是没有问题的!!
      

  8.   

    统一用utf8 。你两处编码不一致
      

  9.   

    我同意一楼的所说,使用一个统一编码的过滤器public class CharsetFilter implements Filter {
    public String charset = null;
    public String getCharset() {
    return charset;
    } public void setCharset(String charset) {
    this.charset = charset;
    }

    public void destroy() {
    // TODO Auto-generated method stub
    } public void doFilter(ServletRequest request, ServletResponse response,

    FilterChain chain) throws IOException, ServletException {
    // TODO Auto-generated method stub
    request.setCharacterEncoding(charset);
    response.setCharacterEncoding("text/html;charset=" + charset);
    chain.doFilter(request, response);
    } public void init(FilterConfig filterConfig) throws ServletException {
    // TODO Auto-generated method stub
                    //从配置文件中获取定义的编码方式(如:utf-8或GBK)
    this.charset = filterConfig.getInitParameter("charset");
    }
    }
      

  10.   

    <%@page contentType="text/html" pageEncoding="GBK"%>
      

  11.   

    前端建议使用共同的编码格式,utf-8或者其他,总之要保持一致,下面是处理提交时的乱码,包括get和post的提交方式都可以进行处理,代码如下,希望对你有帮助
    /**
     * 编码过滤器
     * @author Administrator
     *
     */
    public class EncodingFilter extends HttpServlet implements Filter {
    private String encode;
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {


    HttpServletRequest httpRequest = (HttpServletRequest)request;
     
    if("POST".equalsIgnoreCase(httpRequest.getMethod())){
    httpRequest.setCharacterEncoding(encode);
    }else{
    //得到所有参数和值的键值对
    Map map =  httpRequest.getParameterMap();
    Set set = map.keySet();
    Iterator it = set.iterator();
    while(it.hasNext()){
    Object value = map.get(it.next());

    if(value instanceof String[]){
    String[] values = (String[])value;

    for(int i=0;i<values.length;i++){
    values[i]=new String(values[i].getBytes("ISO-8859-1"),encode);
    }

    }else{
    String str = (String)value;
    str =  new String(str.getBytes("ISO-8859-1"),encode);
    }
    }
    }

    //将请求交给下一个资源
    chain.doFilter(request, response);
    }
    public void init(FilterConfig config) throws ServletException {
    encode = config.getInitParameter("encode");
    }
    }