具体内容如下:
  web服务:was6.0
  浏览器:机顶盒(UT斯达康的盒子)+电视机问题描述:
  1、页面编码GBK
  2、通过post提交表单,汉字乱码,页面中汉字能正常显示(所有过程,页面汉字都正常)。
  3、项目中设置了spring的CharacterEncoding过滤器,转码为GBK
经测试:
  1、盒子提交数据的编码应该为ISO-8859-1,但在转GBK后就乱码,
  2、在过滤器中先强制转换编码为8859,在action中强制转换8859到GBK,乱码问题消失
  3、在过滤器中先转换编码为8859,然后转换编码为GBK,action中不转换,依然乱码
  4、在was中设置jvm参数为GBK,依然乱码
  
整个过程中, 在pc机(windows、linux)中访问都正常大侠,该你出手了
救救小的吧,我不想每个页面都转码啊

解决方案 »

  1.   


    由于Java默认的编码方式是UNICODE,所以用中文易出问题,常用解决:
    String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”);utf-8解决JSP中文乱码问题,在页面的开始处加:
    <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <%request.setCharacterEncoding("UTF-8");%>如果仍不能解决问题,还需要这样处理一下:
    String msg = request.getParameter("message");
    String str=new String(msg.getBytes("ISO-8859-1"),"UTF-8");out.println(st); 
      

  2.   


    package com.wgh.DB;
    public class chStr {
            /***************************************************
                    *method name: chStr()
                    *method function:解决输出中文乱码问题
                    *return value:  String
                    *2006-01-08
            ****************************************************/
            public String chStr(String str){
                    if(str==null){
                            str="";
                    }else{
                            try{
                                    str=(new String(str.getBytes("iso-8859-1"),"GB2312")).trim();
                            }catch(Exception e){
                                    e.printStackTrace(System.err);
                            }
                    }
                    return str;
                }
            /***************************************************
              *method name:convertStr()
              *method function:显示文本中的回车换行、空格及保证HTML标记的正常输出
              *return value:  String
              * author:wgh
              *2006-01-08
            ****************************************************/
           public String convertStr(String str1){
               if(str1==null){
                   str1="";
               }else{
                   try{
                     //replaceAll(String str1,String str2)方法为JDK1.4.x的新方法,使用str2替换字符串中的所有str2字符串
                     str1=str1.replaceAll("<","&lt;");//替换字符串中的"<"和">"字符,保证HTML标记的正常输出
                     str1=str1.replaceAll(">","&gt;");
                     str1=str1.replaceAll(" ","&nbsp;");
                     str1=str1.replaceAll("\r\n","<br>");
                   }catch(Exception e){
                           e.printStackTrace(System.err);
                   }
               }
               return str1;
           }
    }
      

  3.   

    关注中~ 有两个问题问问楼主~
    你的WAS是在linux下的吗?还有你用的是Spring的Action直接输出吗,还是用其他的view层代替?
      

  4.   

    was发布在windows上,spring+struts,view就是jsp
      

  5.   

    自己写一个filter,代替spring的CharacterEncoding做转码。
      

  6.   

    说实话,乱码这个问题,对中文有些特别,好多人,好多人都遇到,有时候,全部都规范了,还是会遇到,所以,这里提的建议对你也没有多少用,不过还是规范一下,所有的操作都用UTF-8吧,前后台都是,页面的设置项也规范一下吧,比如
    <%@ page language="java" pageEncoding="utf-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <%
    String path = request.getContextPath();
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">还有就是,自己写一个filter,(过滤器)对编码进行规范化,这样,如果你的编码有问题,不是它指定的编码,你就通不过,当然,转码是最不好的习惯了,因为,这里你转码了,下次换个地方,可能不需要转码才行,转码反而会出错,规范.
      

  7.   

    都是规范的代码,
    这种问题估计很少见,毕竟用机顶盒的不多
    测试了很多方法,但测试的过滤好像都有问题,
    最纳闷的是,action中能把8859转成GBK,为什么过滤器转GBK就不行
      

  8.   

    顺便也帮偶看看問题:http://topic.csdn.net/u/20090420/18/824ecbde-da66-4d21-986f-d752b399f66a.html
      

  9.   

    跟数据库没关系,我可以硬转换编码消除乱码,但不是最好的办法,
    过滤器里设置总不能成功过滤,是不是我过滤器的设置有什么问题,或was有什么设置问题
      

  10.   

    比较奇怪,强制转换看看~... ...
        <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>
    ... ...
      

  11.   

    在过滤器中设置成这样
        <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>ISO-8859-1</param-value>
            </init-param>
            <init-param>
                <param-name>forceEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>
        <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>GBK</param-value>
            </init-param>
        </filter>
        第一层强制转换成8859,第二层不强制,然后在actiong中再转gbk,乱码就解决了
         但如果在过滤器中转换时,第二层也设置强制转换gbk,依然乱码,