public static String getReadStr(String str) {
        try {
            String temp_p = str;
            byte[] temp_t = temp_p.getBytes("ISO8859-1");
            String unicode = new String(temp_t,"GBK");
            return unicode;
        }
        catch(Exception e) {
            return "null";
        }
    }

解决方案 »

  1.   

    提交到下一页前,加个Filter:
    public class RequestFilter implements Filter{


    public void doFilter( ServletRequest request, ServletResponse response,
      FilterChain chain )
    throws IOException, ServletException {
    request.setCharacterEncoding( "GB18030" ) ;

    chain.doFilter( request, response ) ;
    }

    }
      

  2.   

    不知道这为兄弟是不是在Servlet中的表单传到另外一个表单中
    String stringName = URLEncoder.encode(String);
    这样转换一下再传试试!
      

  3.   

    兄第
    这个问题太老了,
    我觉得现在最好的解决方案是用过滤器(servlet2.3引入的),一劳永逸。简单分析一吓原因(如果不太明白,可以搜一吓,太多了,哈哈)字符编码是字符串与字节的转换规则.在dotnet中,字符串是 char[] , 而字节数据是 byte[]从char[]到byte[]有很多种编码.UNICODE 是最直接的. UTF8 比较统一. GB2312 是我国的标准. 
    ASCII 是很早期的美国信息交换码. 只支持127个字符.如果你要传输中文,不应该使用 ASCII .
    UINCODE/UTF8/GB2312 是你现在最好的选择.
    无论选择那种编码,
    都需要传输上的对应.例如 "你好" ->UTF8-> byte[] -> SOCKET -> byte[] ->UTF8->str就可以还原成"你好" 了.但是如果这个过程前面用 UTF8 , 后面用 GB2312 则会转换错误,导致乱码.