环境:tomcat-5.0.28,ms sqlserver2k 中文版,win2k3
由servlet接收参数,然后调用储存过程,插入数据,中文信息全部是乱码,试过了以下2种方法都不行,请高手指点。
1、入库前转码 param=new String(param.getBytes("iso-8859-1"))
2、在servlet里获取参数前设置request.setCharacterEncoding("GBK");cstmt=conn.createStatement();
cstmt = conn.prepareCall("{call SP_addRepositoryMenu(?,?,?,?)}");
cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
cstmt.setString(2, repositoryMenu.getParentMenuId());
cstmt.setString(3, repositoryMenu.getMenuName());
//cstmt.setString(3, new String(repositoryMenu.getMenuName().getBytes("ISO-8859-1"),"UTF-8"));
//cstmt.setString(3, new String(repositoryMenu.getMenuName().getBytes("ISO-8859-1")));System.out.println("菜单名称: " + repositoryMenu.getMenuName()); cstmt.setInt(4, repositoryMenu.getOperaterId());
cstmt.executeUpdate();
result = cstmt.getInt(1);
cstmt.execute(sql);
cstmt.close();
在控制台打印出的中文信息正常,但写入数据库就成乱码了。

解决方案 »

  1.   

    param=new String(param.getBytes("iso-8859-1")),不应该是
    param=new String(param.getBytes("iso8859_1"),"GBK");吗?不过按说只要设置了request.setCharacterEncoding("GBK");就应该没问题。是不是你的文件本身不是GBK编码?有没有:
    <%@ page contentType="text/html; charset=GBK%>告诉客户端用GBK解码
    <%request.setCharacterEncoding("GBK");%>告诉tomcat的默认解码器用GBK解码,按说应该没问题的。
      

  2.   

    谢谢上面的仁兄,问题已经解决了,应该是
    new String(param.getBytes("gb2312"),"iso8859_1");多转了一次码。
      

  3.   

    这里有详细资料:http://www.graphics.net.cn/article/001/122.asp
      

  4.   

    jsp页面保存到数据库有乱码解决方法Jsp+tomcat+bean中文乱码问题解决方法javabean中参数有乱码
    1) 所有的jsp页面指定字符编码方式,如:Charest=gb2312,Charest=UTF-8等等
    2) 在应用服务器中的server.xml方件中找到设置服务器端口的行,一般是这样开头:”<Connector port="8080"”,
    3) 在找到的行"<Connector"开头的字符串后加上:URIEncoding="UTF-8" ,保存文件
    --------------------------------------------------------------------------
    jsp页面有乱码解决方法    所有的jsp页面指定字符编码方式,如:Charest=gb2312,Charest=UTF-8等等
        <%@ page contentType="text/html; charset=UTF-8">
    --------------------------------------------------------------------------
    jsp单个中文参数乱码解决方法    用这个转换一下: 
        <%!String trans(String chi)
           {
            string result =null;
            byte temp[];
            temp=chi.getBytes("iso=8859-1");
            result= new String(temp);
            }
        %>
    或者直接这样:
        <% 
          request.setCharacterEncoding("UTF-8");
          out.println(request.getParameter("参数ID")
        %>
    --------------------------------------------------------------------------
      

  5.   

    public String getstring(String s)
    {
    if(s==null){s="";}
    try
    {
    byte[] b=s.getBytes("ISO-8859-1");
    s=new String(b);
    }
    catch(Exception e)
    {
    s="";}
    return s;
    }加上这个方法就OK 了