使用RandomAccessFile类读取文件流,并使用seek(int position)方法定位起始位置
使用read()方法读取了一个数据字节,然后如何判断这个字节是中文,还是英文,还是换行符"\r"或者"\n"
判断玩之后,我如何来避免乱码呢!各位,谢谢了!

解决方案 »

  1.   

    呵呵! 楼主对字符集还没有一个正确的认识,byte和char并不是1对1的,不同的字符集也不一样。而且同一字符集,中文char对应的byte数都有差别,所以楼主的问题估计不可能解决。到现在只有通过算法推测文件编码采用的字符集的代码,而且还是一个概率计算方式,并不能准备推断一个字符的的编码采用的字符集,并确定字符在字符集中的范围。
      

  2.   

    GB编码的文件中,
    中英文差不多可以判断字节是否大于127来判断,大于就是半个中文。
    \r\n就是10和13,好判断。
    乱码就难了,因为你不知道当前字节是前半个汉字还是后半个汉字。
      

  3.   

    没办法的,2楼是限定了GBK的txt,而且GBK是2个byte一个中文,但英文仍然是一个byte。
    如果一个GBK的txt去掉文件的第一个byte后再保存,你再打开看,你会看到正确的东西吗? 
    这个是一个道理。txt编辑器都是具备编码识别能力的,例如 Ueditor Editor P 同样你连文件是txt文件,还是其他类型的文件类型都不能确定,怎么去判断。要判断字符是否中文,首先要判断字节流采用的字符集。
      

  4.   

    首先你得知道文件使用的字符集(utf-8文件保存的时候有些保存了一个文件头标识)但是应该文件不能知道它的字符集--有待专家指点一下
    RandomAccessFile类读取文件为data 字节流,然后把它转换成文本流,转换时指定它的字符集,读取出来的都是unicode编码,这样你就能区分它是中文还是英文了,unicode编码我没有深入研究过,不过我可以确定英文的低8位应该是与ASC2编码保持一致,中文高8位与英文字母编码应该有明显区别
    "\r"或者"\n"直接查它的unicode编码就能够区分了,
    另外有些特殊字符可能是4个字节,你要把它当作codepoint来处理,java核心技术中有对此如何辨别的方法。