import java.io.*;public class Bianma {
    
    
    public  void bm(String filepath) {
        
    
   String sread=new String();
    
    try
    {  InputStreamReader fs=new InputStreamReader(new FileInputStream(filepath),"GBK");
       BufferedReader br=new BufferedReader(fs);
       
        String xingming="";
        String zhanghao="";
        while((sread=br.readLine())!=null)
        {    
            byte[] bt=sread.getBytes();        
          
            xingming=new String(bt,20,4);//取2个汉字
          xingming=new String(xingming.getBytes("ISO8859_1"));
          
           System.out.println(zhanghao+","+xingming);
          System.out.println(sread);
        }
               
    }
    catch(IOException o) {
        o.printStackTrace();
    }
    }
    public static void main(String[] args) {
        Bianma bi=new Bianma();
        bi.bm("1.txt");
    }
}
1.txt内容为:1111111111111111114说得来飞机
             6987451221554125562士大夫十分士大夫我想取得第一行“说得”,第二行“士大” 就是文本的20-24之间的中文,按道理应该为2个汉字,现在不管怎么取都是乱码“??”请高手指点了。。

解决方案 »

  1.   

    BufferedReader 取的是字符~~
    在java中一个字符是2个字节
    中文也只是一个字符
      

  2.   

    String test="1111111111111111114说得来飞机6987451221554125562士大夫十分士大夫";
          char [] chars=new char[test.length()];
          test.getChars(0,test.length(),chars,0);
          System.out.println(chars[19]);
      

  3.   

    xingming 已经是GBK编过码的字符流啊,你又将其进行ISO8859-1的编码你用Char, getChars()  试试因为默认的既使你不指定如何编码,虚拟机也会按照其设置给你进行编码,如果你想将其编码其它编码形式,比如ISO8859-1,那么你必须先将得到的字节流解码成Unicode ,然后再进行编码,否则的话就进行了两次编码,这时得到的数据就是废的了
      

  4.   

    我的经验是,能指定字符集的地方都统一用utf-8,这样不仅能很好的支持中文,还能同时支持其他的字符集