int ch;
            StringBuffer buf=new StringBuffer();
            TelnetInputStream t = ftp.list();  //读取服务器端的文件
            while((ch=t.read())>0){   //文件没有读完则进入while循环
                if(ch=='\n'){   //遇到换行打印buf中的内容
                    System.out.println(buf.toString());
                    buf.setLength(0);  //重新设置buf中的内容
                }
                else{
                    buf.append((char)ch);  //将读取到的整型数据转换成char型
                }
            }
            t.close();现在有一个问题,就是打印出来的数据遇到中文就有问题,会显示乱码。我估计是在buf.append((char)ch);  中出了问题,因为中文占两个字节,而我是讲一个个的char加入到buf中。
请问应该怎么解决这个问题啊!!  谢谢了。

解决方案 »

  1.   

    也感觉buf.append((char)ch);会有问题,
    可以考虑先存入byte数组里面,再转回字符串
      

  2.   

    在输出之前,先把buf转换成String(如astr)
    然后:byte b[]=astr.getBytes("ISO-8859-1");
         astr=new String(b);
    然后再System.out.println(astr);
    试试看,行不行?
      

  3.   

    一个中文字符对应一个byte,还是用这个方便不会把一个中文符号拆开
      

  4.   

    TelnetInputStream t = ftp.list();Reader in = new InputStreamReader( t, "GBK" ); // 请问是 GBK 编码吗?while((ch=in.read())>0){
            .........
      

  5.   

    不要用StringBuffer,直接用byte[]做缓存,最后再直接转回String
      

  6.   

    1)TelnetInputStream,指定编码集,一段一段取bytes,再用new String(bytes,"编码")append到buf中.
    2)使用Reader,同样指定编码集,char by char,一个中文字符对应一个char.
    ps:楼主出现的问题不是因为char与中文字符字长不等的问题,而是由于读取char的时候是根据编码走的,所以错误的编码读出来的就是错误的字符了.
      

  7.   

    BufferedReader in = null;
        try {
          in = new BufferedReader(new InputStreamReader(ftp.list()/**, 如果必须,可以加上编码 */));
          String line = null;
          while ((line = in.readLine()) != null) {
            System.out.println(line);
          }
        } finally {
          if (in != null) {
            try {
              in.close();
            } catch (Exception ex) {
            }
          }    }
      

  8.   

    如果没有问题就怪了
    读入的是字节,StringBuffer处理的是字符呀