我用bufferread 读文本文件,如果文本文件的编码为Unicode是 得到是乱码,如果文本的编码为ANSI则没有问题,请问该如何解决

解决方案 »

  1.   

    笨但是一定可行的一个方法:
    先用java读取到文件  再暂存到一个temp文件中,把这个temp用你想用的编码方式
    然后再读文件。可以看看 java编码  和本地编码的问题  ,以前看过,现在忘光了...
      

  2.   

    用BufferReader读取字符,编码为Unicode,BufferedInputStream读取的编码为ANSI
      

  3.   


    InputStreamReader类有个构造方法可以选择java.nio.charset.Charset记得用BufferedReader br=new BufferedReader(new FileReader("c:\\text.txt"));
    text.txt是本地的Locale指定的编码格式,如果是windows中文版一般是GBK.也就是说你用记事本打开没有乱码是因为记事本知道它是GBK.但如果text.txt是UTF-16BE格式编码,你用记事本打开是乱码,只好用ultraedit打开.而用BufferedReader br=new BufferedReader(new FileReader("c:\\text.txt"));肯定是乱码因为它把text.txt当成gbk编码来打开.所以有了下面的例子你可以试一下.记得在windows上有BOM的问题 哦BufferedReader br=null;
    try{
    InputStreamReader isr=new InputStreamReader(new FileInputStream("c:\\test.txt"),Charset.forName("UTF-16BE"));
    br=new BufferedReader(isr);
    String s;
    while(null!=(s=br.readLine())){
    System.out.println(s);
    } }catch(Exception e){

    }finally{
    try{
    if(br!=null)
    br.close();
    }catch(Exception e){
    e.printStackTrace();
    }
    }
      

  4.   

    更正一下,因为有BOM的存在,即使是UTF_16BE,记事本程 序也可以正常打开的