class  Test
{
public static void main(String[] args) 
{//这里的java源文件是用的utf-8编码//GBK可成功转换并转回去,用IE来看的话选GB2312可以看到第一个和第三个(test中文test涓枃test中文),选UTF-8可看到第二个(test֐΄test中文test֐΄)
String s = "test中文";
try {String s2 = new String(s.getBytes("UTF-8"),"gbk");String s3 = new String(s2.getBytes("gbk"),"UTF-8");System.out.println(s+"|"+s2+"|"+s3);
FileWriter f = new FileWriter("e:/ttt.htm");
PrintWriter out = new PrintWriter(f);  
out.print(s);
out.print(s2);
out.print(s3);out.close();
f.close();} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//===================================================
////GB2312同样的写法且得出来除第一个外,其他均错:test中文|test涓????|test?????String s = "test中文";
try {String s2 = new String(s.getBytes("UTF-8"),"gb2312");String s3 = new String(s2.getBytes("gb2312"),"UTF-8");System.out.println(s+"|"+s2+"|"+s3);
FileWriter f = new FileWriter("e:/ttt.htm");
PrintWriter out = new PrintWriter(f);  
out.print(s);
out.print(s2);
out.print(s3);out.close();
f.close();} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//=================================================== }
}

解决方案 »

  1.   

    我在SERVER端的TOMCAT上全用的utf-8编码,JSP上面也用了utf-8编码,系统运行很正常,无论是GET或者POST都能正常显示中文.现在有一个新的需求:其他网站,一般是GB2312编码的,要调用我这边的一个SERVLET,我的想法是加一个参数来判断,如果存在这一参数,则试着将值从GB2312转到UTF-8,但无论怎么写好像都不行,而且还发现了上面这个问题,请高人指点!
      

  2.   

    也就是说:
    现在WEB容器错误地将gbk用utf-8读出来了,相当于new String(str..getBytes("gbk"),"UTF-8");请问如何返回到最初的gbk状态?
      

  3.   

    加个过滤器不行吗? 负责将服务器端的字符转换成gbk传给客户端
    相反的就是将客户端的转换成utf-8传给server
      

  4.   

    现在是客户端大部分是UTF-8请求,但也有少数gbk,过滤器可以解决吗?
      

  5.   

    用过滤器只能解决post的问题,get的话要修改容器的配置比如tomcat就有一个参数URIEncoding要将它修改成你所希望的字符集,但是URL参数里出现中文不好,可能在客户端会出现各种问题,所以如果有中文建议将参数编码为%**这样的形式。
      

  6.   

    无论POST或是get,在本站范围内访问都是正确的.所有编码均采用UTF-8.但现在如果浏览器强制设置成GB2312,或是在其他的网站有GB2312页面,需要发送到本站的servlet,这个servlet如何同时正确解析这两种客户端编码post或者get过来的数据?WEB容器已经配置成所有请求均按UTF-8处理.
      

  7.   

    解决web开发中的中文问题
    http://www.blogjava.net/rickhunter/articles/33571.html
      

  8.   

    用不着再搬出楼上再篇老文章.不是一般乱码问题.其实问题很简单,如何在servlet同时正确处理两种不同的客户端编码形式,gb2312和utf-8.
      

  9.   

    可以使用过滤器在doGet方法中添加如下代码:
       HttpServletRequest req = (HttpServletRequest)request;
        req.setCharacterEncodint("gb2312");
      

  10.   

    //在过滤器加加一条:
    if (request.getParameter("encode") != null) {
      //里面什么事情都不做
    }//在servlet中
    if (request.getParameter("encode") != null) {
      isGBK = true;
    }...
    if (isGBK) {
    txtContent = new String(request.getParameter("zxContent").getBytes("ISO-8859-1"), "GBK");
    }搞定!
    经过了一番艰苦的测试...终于能将gbk编码和utf8编码同时处理了,其中gbk的页面需要在表单中加一个<input name="encode" type="hidden" value="gbk" />
      

  11.   

    就是不知道为什么过滤器必须要
    if (request.getParameter("encode") != null) {
      //里面什么事情都不做
    }才能行,去掉之后就不行了.