最近用笔记本写JAVA读TXT文件(utf-8编码,按行读),发现一个以前没有出现或没有注意的问题每一个文件的第一行前n个字符(中文,没统计多少个,估计有十几个)读出来是乱码,但是后面的都正常
如果在第一行前面加个空行(把以前的第一行变第二行),就不会出现乱码的问题
读文件代码如下
File f= new File(source);
FileInputStream fis = new FileInputStream(f);
InputStreamReader isr = new InputStreamReader(fis,"utf-8");
BufferedReader br = new BufferedReader(isr);这是什么原因?

解决方案 »

  1.   

    如果读出来开头是一个"?"是正常的,这是windows下面的BOM头,但是多于1个乱码,应该不会吧
      

  2.   

    如果读出来开头是一个"?"是正常的,这是windows下面的BOM头,但是多于1个乱码,应该不会吧
      

  3.   

    在自己的笔记本上读开头有十几个乱码,但是在公司电脑上读开头是“?”
    很奇怪。。
    两台电脑用的JDK和Eclipse都不一样,操作系统也不一样,应该和软件没关系吧
      

  4.   

    这个是因为你存的txt的编码格式问题把。import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;public class Demo{
        public static void main(String[] args)
        {
            Demo d = new Demo();
            try
            {
                d.readAsCode("d:\\bb.txt");
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        public void saveAsUTF16(String fileName, String content) throws IOException{
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), "Unicode"));
            writer.write(content);
            writer.close();
       }
        public void readAsCode(String fileName) throws IOException{
            BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName),"utf-8"));
            String rslt;
            while((rslt = reader.readLine())!=null)
            {
                System.out.println(rslt);
            }
        }
    }
    用什么编码存的就用什么编码去读
      

  5.   

    这个,我说了就第一行前十几个字符出现乱码,后面所有的都正常
    一个文件中会出现不同的编码吗?这个我还真不知道
    另:文件是utf-8,读也是用utf-8
      

  6.   

    BufferedReader in = new BufferedReader(new FileReader(path));
    试一下。
      

  7.   

    可能是文本文件本身不是utf-8类型的,你却按utf-8来读,所以有这个问题?