Java踩坑系列(二):RandomAccessFile中readLine()乱码问题

在使用RandomAccessFile时,通过将readLine()方法返回的String类型的字符串打印到控制台上出现的是一些乱码。

例如,读取“你好,世界!”这一行:

  读取这一行的方法部分代码如下

System.out.println(raFile.readLine());

  会出现这样的输出结果:

显然,这与我们要的结果是不一致的。

解决方法: 

readLine()方法可以从该文件的当前文件指针处成功地读取字节,直到到达行结束符或文件的末尾。每个字节都转换为一个字符,方法是采用该字符的低八位字节值,并将该字符的高八位设置为零。因此,此方法不支持完整的 Unicode 字符集。

再通过查阅一些资料发现,使用 RandomAccessFile对象方法的 readLine() 都会将编码格式转换成 ISO-8859-1。因此我们需要进行一次转码。

System.out.println(new String(raFile.readLine().getBytes("ISO-8859-1"),"utf-8"));

这样最后输出的结果是正确的。

 

整段程序代码如下:

import java.io.IOException;
import java.io.RandomAccessFile;

public class Test {
    public static void main(String[] args) throws IOException {
        RandomAccessFile raFile = new RandomAccessFile("Readme.txt","rw");

        String line1 = "Hello World!\n";
        String line2 = "你好,世界!\n";

        //输入两行文本
        raFile.write(line1.getBytes());
        raFile.write(line2.getBytes());

        //将文件指针指向第二行开始处,然后读取第二行的内容,并输出到控制台
        raFile.seek(line1.getBytes().length);
        //System.out.println(raFile.getFilePointer());
        System.out.println(new String(raFile.readLine().getBytes("ISO-8859-1"),"utf-8"));//解决乱码
        
        raFile.close();
    }
}

 

posted @ 2020-12-15 16:48  Alaer0v0  阅读(972)  评论(0)    收藏  举报