String ftpFile = new String("通知控件问题总结".getBytes("GBK"),"UTF-8");
System.out.println("UTF-8------->GBK  "+new String(ftpFile.getBytes("UTF-8"),"GBK"));
得到:
UTF-8------->GBK  通知锟截硷拷锟斤拷锟斤拷锟杰斤拷
该怎么转码 可以让他正常显示~

解决方案 »

  1.   

    改成
    String ftpFile = new String("通知控件问题总结".getBytes("GBK"),"ISO-8859-1");  
      

  2.   

    String ftpFile = new String("通知控件问题总结".getBytes("GBK"),"iso-8859-1"); System.out.println("UTF-8------->GBK  "+new String(ftpFile.getBytes("iso-8859-1"),"GBK"));
      

  3.   

    具体问题是这样的:
    用apache的FTPClient的listNames方法 从ftp服务器上获取文件名, 在本地测得时候, (serv-u)在本机上,xp操作系统, 获得文件名后 要用 new String(ftpFile.getBytes("ISO-8859-1"),"GBK"); 可以正常显示
    但集成测试的时候, ftp服务器为windows,客户端在linux上。这么转就不行了,调了很多次,从ISO-8859-1转到任何编码都是乱码, 只有从UTF-8, 转gbk的时候 才能显示几个中文,但多半是乱码。
    我用本地(xp)去连远程ftp(windows) 用ISO-8859-1转GBK可以正常显示。 估计就是linux服务器的问题。
    现在我用上面的方法  得到的乱码和  linux客户端的乱码是一致的。 所以我觉得ftpFile的格式应该没错
    现在就是怎么转过来。  ftpFile的编码格式是一定的。 我没法控制。 所以只能在转码上改。
      

  4.   


    String ftpFile = new String("通知控件问题总结".getBytes("GBK"), "ISO-8859-1");
    System.out.println(new String(ftpFile.getBytes("ISO-8859-1"), "GBK"));
      

  5.   

    String ftpFile = new String("通知控件问题总结".getBytes("UTF-8"));
    System.out.println("UTF-8------->GBK  " + new String(ftpFile.getBytes(), "UTF-8"));
      

  6.   

    public static String escape(String src) throws Exception {  
            int i;  
            char j;  
            if (src != null && src.length() > 0) {  
                StringBuffer tmp = new StringBuffer();  
                tmp.ensureCapacity(src.length() * 6);  
                for (i = 0; i < src.length(); i++) {  
                    j = src.charAt(i);  
                    if (Character.isDigit(j) || Character.isLowerCase(j)  
                            || Character.isUpperCase(j) || j == '-' || j == '_'  
                            || j == '.') {  
                        tmp.append(j);  
                    } else if (j < 256) {  
                        tmp.append("%");  
                        if (j < 16) {  
                            tmp.append("0");  
                        }  
                        tmp.append(Integer.toString(j, 16).toUpperCase());  
                    } else {  
                        tmp.append("%u");  
                        tmp.append(Integer.toString(j, 16).toUpperCase());  
                    }  
                }  
                return tmp.toString();  
            } else {  
                return "";  
            }  
        }