页面form中,提交的中文,比如 username=中文,装载这个页面form数据的 form Bean 中得到的username字段值是乱码.我在JSP页面中已经设置了 <%@ page language="java"  pageEncoding="GBK" contentType="text/html;charset=utf-8" %>请问怎么解决?

解决方案 »

  1.   

    charset="gb2312"然后从浏览器到javaBean的时候两者编码不同,所以一定会出现乱码,可以修改服务器的编码识别GBK或者是在java中用过滤器来实现对编码的转换,要不就用哪种getbyte
      其是很简单  自己试试,如果是tomcat修改服务器也许就可以,虽然可移植性差,但是先用着修改conf下的serve.xml的97行加上URIEncoding="GBK"
      

  2.   

    谢谢江南烟雨
    我加了 URIEncoding="GBK" ,问题还是没有解决
    我的web.xml中已经加了如下的:   <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
            <init-param>
                <param-name>forceEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>    <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>*.html</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>*.jsp</url-pattern>
        </filter-mapping>
      

  3.   

    今晚的东西终于写完了 你这是使用过滤器肯定好用了,基本不会出现什么bug而修改服务器的话有的好用有的不好用,我们现在一般都是使用这种方式
      

  4.   

    <%@ page language="java"  pageEncoding="GBK" contentType="text/html;charset=utf-8" %>
    这里面的两个编码,第一个 pageEncoding="GBK"指的是jsp页面的编码,就是你的操作系统中jsp原文件的编码,容器会检测这个值读取原文件编译。第二个charset=utf-8指的是jsp输出的结果的编码,同时浏览器会将编码设成相应编码,当浏览器发送请求时,会使用此编码对发送的内容编码。
    出现乱码的原因是,在默认情况下,容器使用iso8859-1来解析参数,前后编码不一致就出现了乱码。
    解决办法,通过调用request的setCharset(方法名可能不对)方法可以设置容器的编码。这种方法就设置过滤器的方法。但是对于get请求发送的数据对于tomcat来讲,这种方式无效,需要设置serve.xml中connector的URIEncoding属性来指定,在4。x以后可以使用useBodyURIEncoding来设置和contentType="text/html;charset=utf-8" 中一样的编码。也就是说如果完全解决编码问题,对于tomcat来讲需要两种方式都加。
    “我加了 URIEncoding="GBK" ,问题还是没有解决”是因为这个设置之后影响tomcat解析url中的参数也就是说只对get请求有效。加了过滤器有效是因为你的form是通过post提交的。
      

  5.   

    接受的servlet也要社一下编码!!
      

  6.   

    非常感谢 sansong089 说得这么详细.现在的情况:
    JSP页面 :-------使用post方式
    <%@ page language="java"  pageEncoding="GBK" contentType="text/html;charset=utf-8" %>
    server.xml:-----------
        <Connector className="org.apache.catalina.connector.http.HttpConnector" port="8080" maxHttpHeaderSize="8192"
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="100"
                   connectionTimeout="20000" useBodyURIEncoding="utf-8" disableUploadTimeout="true" />web.xml:
      <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
            <init-param>
                <param-name>forceEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>    <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>*.html</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>*.jsp</url-pattern>
        </filter-mapping>还是问题依然存在.
    我也在action对应的处理方法中 
    该方法传入的四个参数 mapping,form,request,response
    设置了request.setCharacterEncoding("UTF-8");
    此时form里面存放的页面数据就是乱码了.不知道sansong089说的设置容器的编码 是应该怎样来设置.
      

  7.   

    在action中设置request.setCharacterEncoding("UTF-8");是不对的.因为这时数据已经从request中取出,放到actionForm中了.
    设置过滤器没起作用的原因是,你的过滤器根本没有映射.do,而所有的struts的请求都是有由.do处理的.所以把action中设置request.setCharacterEncoding("UTF-8");去掉.
    然后把过滤器映射中加上,*.do对于post请求应该就没有问题了.
      

  8.   

    contentType="text/html;charset=utf-8" 该成charset="GBK"