大概说下整体,基本所有JSP都是设成的GBK。这个部分首先我是一个页面,分为左,右上,右下,右上的JSP提交时需要提交到其余两个页面,所有一个用的是action提交到右下,左侧就用的location左页面加参数来做的但其中左侧页面有特殊用途所以需要设置为UTF-8,action因为过滤器设置编码是GBK(下面有该过滤器此部分设置),此时该页面提交到action时,action中的中文值乱码。请问如何解决?
 
试过  new String( dataXML.toString().getBytes( "utf-8" ), "gbk");这样貌似转没用试过把过滤器
<filter-name>Set Character Encoding</filter-name>
    <filter-class>com.tvlink.util.SetCharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>GBK</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>Set Character Encoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping> 
中的GBK替换成UTF-8,然后action里加上request.setCharacterEncoding("utf-8");可以解决这个问题倒是,但是其他的JSP页面全都是GBK的,这个页面因为有特殊需要所以必须得UTF-8,如果单独设置该过滤器,前面的全局过滤器如何修改?这个单独的过滤器怎么写呢?应该写我action的地址还是我提交表单的jsp的地址···
或者有其他什么办法,多谢页面提交到action里之前都是没问题的,已经设置 request.seteccoding('UTF-8')来取参了

解决方案 »

  1.   

    new String( dataXML.toString().getBytes( "gbk" ), "utf-8");这样才转成utf-8格式吧
      

  2.   

    尽量使用post提交。设置请求和响应过滤器设置字符编码
      

  3.   

    urldecode
    或者后台
    new String( dataXML.toString().getBytes( "gbk" ), "utf-8");
    或者jsp页面<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    或者数据库编码设置为utf-8
    或者tomcat 中的server.xml添加项目编码
      

  4.   

    new String( dataXML.toString().getBytes( "gbk" ), "utf-8");  建议还是所有jsp页面和程序中统一编码风格
      

  5.   

    这个问题我前两天也遇到过,后来用了struts2的标签库的标签,form表单里设置这个属性即可enctype="multipart/form-data"
      

  6.   

    可以试试这样看看
    用byte[] b = dataXML.getBytes("iso8859_1"):返回字符串的一个byte数组b
    如果b[i]有63,不用转码; 
    如果b[i]全大于0,那么为英文字符串,不用转码; 
    如果b[i]有小于0的,那么已经乱码,要转码。  建议最好还是将jsp页面的编码方式统一或者再写个过滤器拦截指定的action
    或者对这次action请求加个参数标记,当识别是这次特殊编码的请求时,对其转码就可以了
      

  7.   


    额 我action是GBK,可是JSP那边是utf-8,action继续提交到我的接口方法里也是GBK啊,这里JSP提交过来到action不是应该用utf-8转gbk么? 
      

  8.   


    JSP之前加过<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>了,没效果
    数据库这个改编码方式貌似用不到,现在到action就已经是乱码了,还没提交到数据库了
      

  9.   


    嗯,其实之前都是统一的GBK,就这次这个模块比较特殊得用UTF-8,下次开发都用utf-8了···吃一堑长一智···不过现在得解决眼前的问题
    或者再写个过滤器拦截指定的action
    或者对这次action请求加个参数标记,当识别是这次特殊编码的请求时,对其转码就可以
    了额 俺在主题帖就问这个咋写了,兄台指点指点吧,以前过滤器都是直接/*,这里指定应该是制定具体的action还是指定jsp?如果是action的话是具体到某个方法,还是整个action的文件路径?之前写了一个指定到action.do和action的,反正都没起效似乎,不知道相对路径出了问题还是这样不对,而且因为之前有个全局过滤器了,这个过滤器怎么设置应该?放在全局过滤器前面还是怎样?参数标记比较好弄的话指点指点也行···
      

  10.   


    开始的时候就在action里了貌似不行··· 以前遇到转码都是用这个来解决··· 这次囧了
      

  11.   

    建议全统一utf-8,要不试试response.setCharacterEncoding("UTF-8");
      

  12.   


    确实应该当初就全统一为UTF-8,不过现在数据库啊,接口啊,其他的页面啊都是GBK了,现在如果改过去变动太多了···response和request的setCharacterEncoding我都试过了,目前没效果,我在action的每个方法中最开头就设置这个了
      

  13.   


    post提交:
    单个页面设置request.setCharacterEncoding("")指定编码方式
    或配置过滤器,可以很好解决乱码问题
    get提交:
    在tomcat\conf下server.xml配置文件中<Connector port="8080" ....../>内添加属性URIEncoding="UTF-8"即可,完整如下:
    <Connector   port= "8080 "   protocol= "HTTP/1.1 "    
               connectionTimeout= "20000 "    
               redirectPort= "8443 "   URIEncoding=”utf-8”/> 
    解决乱码问题
    或单个页面内手动转换参数编码格式也可,
    String str = request.getParameter("...");
    byte[] bytesStr = str.getBytes("ISO-8859-1");
    String str = new String(bytesStr, "UTF-8");
    此时str便是UTF-8编码格式
      

  14.   


    目前页面编码是utf-8,页面也设置request.setCharacterEncoding("utf-8")了。是post方式
    我从另一个页面传到这个页面的值在提交action那边之前是正常的,没乱码,提交到action之后在action里是乱码···在action里response和request的setCharacterEncoding目前都试过了暂时不行还是
      

  15.   

    在action里用
    new String( dataXML.toString().getBytes( "gbk" ), "utf-8")
    双汉字的话可以转过来,单个汉字还是乱码