RandomAccessFile解决中文乱码问题

使用RandomAccessFile类-解决readLine乱码问题
读文件乱码是因为在RandomAccessFile下用readLine的方式会自动将编码变成ISO-8859-1。所以只要按照如下方式即可

RandomAccessFile fl=new RandomAccessFile(file,“rw”);
while(fl.getFilePointer()
System.out.println( new String(fl.readLine().getBytes(“ISO-8859-1”), “gb2312”)); //gb2312是你文本编码格式。

}

使用RandomAccessFile向数据库写入中文的时候,

     *使用write(String.getBytes()), 能够正常写入



     *使用writeBytes(String), writeChars(String), writeUTF(String)均产生乱码。

1、String.getBytes()将会按照当前系统默认的encoding方式获得字符串的 Bytes,RandomAccessFile.write(byte[])将这个byte数组正确写入。由于写入的实际就是Windows平台的 nativecode编码,所以文件还能够被正确的阅读。

2、RandomAccessFile.writeBytes(String)将字符串的各个字符(当然是用unicode编码的)的高8位去掉,写入文件。

3、RandomAccessFile.writeChars(String)将字符串的各个字符按照unicode的编码,以Big-endian的方 式写入文件。Windows平台上默认文件的编码方式为Little-endian,所以用写字板打开看到的是乱码,但是如果我们用浏览器打开这个文件 (testWriteChars.dat)并指定编码方式为Unicode Big-endian,就能看到正常的“中”字了。

4、RandomAccessFile.writeUTF(String)首先写入00 03表示其后将写入3个实际的字节,然后写入“中”的UTF-8编码:E4 B8 AD

通过上面的分析,我建议如果使用RandomAccessFile来写入中文的话,最好用 RandomAccessFile.write(String.getBytes())的方式,如果为了保险起见,还可以进一步指定运行平台的默认 nativecode编码方式,例如使用:RandomAccessFile.write(String.getBytes(“gb2312”))

参考链接:https://www.cnblogs.com/1130136248wlxk/articles/5109331.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟小世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值