不能用字符流读取文件,需要用字节流读取文件,该文件中含有中文,英文,键盘上的所有字符,在读取的时候,设置的缓冲区是1024,那么就有可能出现一种问题,在读取到1023字节的时候都是英文和数字,刚好一个字符一个字节,这个时候碰到一个汉字,就只读取了汉字的其中一个字节,就出现了乱码.
以下方案不行:
  读取到\r\n或者是\n,为什么可能根本就没有换行这个字符写入到文件.
  
  快过年了给个吉利分数数字88,恭祝各位:
   新年到、春节到、有成绩、别骄傲、失败过、别死掉、齐努力、开大炮、好运气、天上掉、同分享、大家乐。天天好运道,日日福星照!java java乱码 

解决方案 »

  1.   

    可以增加输出字符的编码格式为utf-8的代码
      

  2.   

    不要读一次1024byte就转换为string, 读取所有的byte,把所有byte转换为string 
    给点代码可以参考以下
    int size_btCat = 0;
                            for(int i = 0;;i ++){
                                if(m_btCat[i] == 0){
                                    size_btCat = i;
                                    break;
                                }
                            }
                            
                            //when we scan chinese code, because one chinese word need 3bytes,
                            //so we should get all buffer to change to the string at end
                            if(buffer[size - 1] == '\r'){
                                
                                for(int i=0; i < size; i ++){
                                    int tmpSize = size_btCat;
                                    m_btCat[tmpSize + i] = buffer[i];
                                }
                                
                                String tmpStrSec = new String(m_btCat, 0, m_btCat.length);
                                Arrays.fill(m_btCat,(byte)0); 
                                postBroadcast(tmpStrSec);
                            }
                            else{
                              //if string is bigger than 32bytes, we should concat not only times
                                for(int i=0; i < size; i ++){                                
                                    int tmpSize = size_btCat;
                                    m_btCat[tmpSize + i] = buffer[i];
                                }
                                
                                //m_strCat = m_strCat.concat(str);
                            }
      

  3.   

    是想看看如何处理这样的问题,当然可以用字符流,就是想看看这种方式该如何处理,
    我有一种方案:(这种目前还没有代码,只是思想)
        1.记录指针当前的位置,如果碰到1023个字节都读取完整而1024个字节只读取半个汉字的时候,下次重新读取的时候重置指针的位置,也就是退回1023重新开始读.  PushbackReader
        2.记录指针当前的位置,如果碰到1023个字节都读取完整而1024个字节只读取半个汉字的时候,还是new String(...),但是只取字节数组中的0-1023处,之后的保存和下一次读取的内容一起new String(...)OK问题解决谢谢各位
      

  4.   

    第三种方案:
    RandomAccessFile.getFilePointer() 得到文件指针的位置 
    RandomAccessFile.seek() 设置文件指针的位置