在下在用tomcat5.0+eclipse+mysql5+struts1.1写一个程序时,在表单输入中文,或者日文等,我在eclipse调试时看到form中相应的属性得到的是乱码,存到数据库里再取出来,再显示在页面中也是乱码,我的mysql里设了 utf-8,jsp页面中也设置了 utf-8字符集,怎么处理用户输入各种编码的字符而不产生乱码问题?有哪位高手能帮我解决一下?
还有就是我用<bean:write>显示了一条记录,在这条记录后面有个删除按钮,我想删掉这条记录,请问怎么获得要删除这条记录所需要的关键字值?回答得好一定加分~~

解决方案 »

  1.   

    用个过滤器在里边设定一个request的字符集应该就可以了
      

  2.   

    写一个过滤器Servlet设置request.setChar什么Encoding为gb2312就OK了。
      

  3.   

    在web.xml里配置个过滤器.
    删除用多选框吧.多选框的value="<bean:wirte name="xxx" property="id">",就是把ID传到后台处理.
      

  4.   

    我现在能得到前台传过来的正确的编码形式的参数了,但再传给数据库处理后返回的值又显示为乱码,在网上找了资料,把mysql的自符集设为utf8,把tomcat 里的url修改为  url="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf8"
    可是修改后,我再调试原来的程序,在执行executeQuery()时发生了异常,请高手再指教,谢谢。
      

  5.   

    String accounts=request.getParameter("Username").toString();
    byte temp[] =str1.getBytes("ISO-8859-1");
    accounts=new String(temp);
    out.print(accounts);其中的"Username"是表单相应的名字,用上面的方法就可以解决表单传过来的乱码了
      

  6.   

    我的页面指定了使用utf-8,在不经过数据库的时候,我能从页面里面得到正确的值,也能显示正确的数据,没有乱码的现象,如果我的数据经过数据库后,显示的就是问号。我把数据库的字符集设为utf-8,就会出现执行executeQuery()时发生异常。
      

  7.   

    form传送参数方式有2种
    1.get方式的解决方法是:
    <Connector port="8080"     maxThreads="150" minSpareThreads="25" maxSpareThreads="75 enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='GBK' />
    最后那加入URIEncoding='GBK' 就可以了。
    2.加入过滤器能够解决的问题,针对post提交有效在%Tomcat 5.0\webapps\servlets-examples\WEB-INF\classes\filters下找到
    SetCharacterEncodingFilter.java ,之后在你的工程中建一个名filters的包,包里就放SetCharacterEncodingFilter.java,之后在Web.XML中,加入 <filter>
        <filter-name>Set Character Encoding</filter-name>
        <filter-class>com.cecp.filter.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>GBK</param-value>
        </init-param>
        <init-param>
            <param-name>ignore</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter><filter-mapping>
        <filter-name>Set Character Encoding</filter-name>
          <url-pattern>/*</url-pattern>
    </filter-mapping>以上我已经在我的电脑上测试成功~!
      

  8.   

    glpyh() 谢谢你给予这么详细的回答。我确实是用和你那样的方法解决了从表单传参出现乱码的问题,但我现在的问题是怎么和数据库正确传递数据。谢谢。
      

  9.   

    改为url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8"试试。
      

  10.   

    在数据库的URL中, 如果使用Hibernate, 则在hibernate.cfg.xml配置中
      <property name="connection.url">                                          
    jdbc:mysql://localhost/bookstoressh
    useUnicode=true&amp;characterEncoding=gb2312                                                                
    </property> 
    这里使用mysql里面的bookstoressh数据库,请注意url中的useUnicode=true&amp;characterEncoding=GB2312.这是mysql特有的 
    这个是我一个朋友总结的,给你贴出来,希望对你有点帮助吧
      

  11.   

    试过了,还是不行,报了更严重的错误,http://localhost:8080/***,它提示*** is not availabe
      

  12.   

    glpyh(),我没有使用Hibernate,谢谢你。
      

  13.   

    一种方法是:webserver 中设 encoding='gbk' or 'gb2312'
    另一种很土的方法:对request.getParameter('para') 的字符转码
      

  14.   

    可能是mysql的问题.
    建库时要加上使用编码,如下SET NAMES 'gbk';
    CREATE DATABASE `databaseName`
        CHARACTER SET 'gbk'
        COLLATE 'gbk_chinese_ci';USE `databaseName`;
    SET NAMES 'gbk';
    然后导入你的表.