怪了,
用Statement直接构造好sql语句插入的时间就不会又乱码,一切正常,
但是在换了
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1,"中文中文");
这样的入库的时候,变成乱码勒,别说从页面过来的时候用getByte直接转换,
我现在是直接输入中文都变乱码,
没有任何传值的操作,也就不存在说在request的时候乱码问题,
奇怪勒,杂回事?在另一个项目里面这样做就没任何问题,mssqlserver2000
tomcat6

解决方案 »

  1.   

    在web.xml添加过滤器试一下。
    <!--添加过滤器,解决表单提交时的中文乱码问题-->
      <filter>
            <filter-name>SetCharacterEncoding</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>GB2312</param-value>
            </init-param>
        </filter>    <!-- 要过滤的类型 -->
        <filter-mapping>
            <filter-name>SetCharacterEncoding</filter-name>
            <url-pattern>*.jsp</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>SetCharacterEncoding</filter-name>
            <url-pattern>*.shtml</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>SetCharacterEncoding</filter-name>
            <url-pattern>*.html</url-pattern>
        </filter-mapping>
      

  2.   

    To tianxuejiang123()过滤器有,但是这里应该不是过滤器的问题吧?
    就没有从表单request值进来,直接写进去入库然后就乱码了。
      

  3.   

    或者在你的Bean中处理一下,你看看哪个好用。
    public String getApplication () throws UnsupportedEncodingException {
    //post=request.getParameter("keywords").getBytes("8859_1"); 
    String postName=this.hrDemandAccept.getPostName();
    //String postName="";
    if(postName!=null&&!postName.equals("")&&!postName.equals("null")){
    String temp=new String(postName.getBytes("ISO8859_1"),"gb2312");
    hrDemandAccept.setPostName(temp);
    }
    //String temp=new String(postName.getBytes("ISO8859_1"),"SHIFT-JIS");
    //hrDemandAccept.setPostName(temp);
    return SUCCESS;
    }
      

  4.   

    数据库语言的问题吧?曾经用MySQL发生过这样的事情,把数据库使用语言改为GB2312应该就可以了,你可以试试。
      

  5.   

    数据库的问题也应该可以排除把?
    现在的问题是
    用Statement直接构造SQL语句插入,没问题,
    就是用pst.setString的时候不行,变乱码了。
      

  6.   

    我给你发的在Bean中处理的方法你试了吗?
    你从表单接收的产生乱码的属性值,String postName=this.hrDemandAccept.getPostName();
    getPostName就你产生乱码的属性值,将它处理一下就行,我遇到过的问题,我就是这样解决的
      

  7.   

    To tianxuejiang123()
    我没有从表单中获得值,
    我现在直接pst.setString(1,"中文中文");
    就这样写,到数据库里面都是乱码!
    没有request的。To chao19841()
    我转什么?我都没获得值,我怎么转?我是直接写一个字符串进去得。
      

  8.   

    你这个是在 Java 文件中写的,还是在 JSP 中写的?
      

  9.   

    To bao110908(火龙果) java中的,和jsp没有关系的。:(
      

  10.   

    在java 文件里写的编码  和你从页面传过来的编码是不一样的   所以要你吧你写入的字符串先转一下再插入
      

  11.   

    String 也有自己的编码,估计不匹配把。
    你看看。
      

  12.   

    统一编码风格,首先MYSQL的配置文件my.ini里要改成你想默认的编码,比如utf8.其他配置文件也都统一utf8,这样写类文件的操作数据库的时候就不需要像传统的写法那样用极度麻烦的转换编码的土办法了.具体做法陈刚的Eclipse3.2那本书上就有详尽的办法.
      

  13.   

    我的sqlserver2000,tomcat 5.0 没这个问题.
      

  14.   

    可能和数据库默认的编码有关系··· 
    如果是默认的ISO8859-1 中文放进去就会出现乱码
      

  15.   

    我也遇到过这种情况,但我是用传统的土办法。即转换编码的方法处理的。有兴趣可以试试。1.转换用的bean :
    public class ChangeEncoding{
            public String toChinese(String s){
              if(s==null)
                  return null;
              try{
                  //
               String convert=new String(s.getBytes("GBK"),"ISO8859-1");
                  return convert;
              }catch(Exception e){}
              return null;
          }
    }2. 这样的入库:
    PreparedStatement pst = conn.prepareStatement(sql);
    pst.setString(1,new ChangeEncoding("中文中文"));
    我试 过可以的。
      

  16.   

    立即更正一下。第二步骤:
    2. 这样的入库:
    PreparedStatement pst = conn.prepareStatement(sql);
    pst.setString(1,new ChangeEncoding().toChinese("中文中文"));
    我试 过可以的。
      

  17.   

    IDE工具的问题,保存为.Java文件时可能就出了编码问题如果是eclipse的话,修改 工作空间的编码方式就行了
      

  18.   

    还是没找到什么问题,
    回上面一些朋友:
    数据库是mssqlserver,貌似没有mysql中的那个编码问题吧?
    还有就是,
    编码转换这个地方都用不上,
    因为我用Statement构造SQL语句插入的时间,一切都是正常,
    就是换到PreparedStatement插入的时候出的问题,而PreparedStatement插入,还不能看到最后的插入结果或者说是插入语句是什么,郁闷.试一下ql308214() 的方法.感谢楼上所有的朋友.
      

  19.   

    你直接看一下你的JAVA文件是否是正常编码,我也怀疑是IDE工具的问题,按道理不存在这样的问题的
      

  20.   

    指定一下字符编码,例如:jdbc:mysql://10.1.4.187:3306/zjreader_db?&characterEncoding=utf8