想用RandomAccessFile读取一个中文文件,文件是个用XP下记事本保存的以UTF-8编码的文本文件.
我先读取了2个字节,第一个字是中文.
RandomAccessFile reader = new RandomAccessFile(sourceFile, "r");
byte[] buff = new byte[2];
reader.readByte(buff);
System.out.println(new String(buff,"UTF-8");
这样出现的不是问号就是乱码,请问应该如何读取?
我先读取了2个字节,第一个字是中文.
RandomAccessFile reader = new RandomAccessFile(sourceFile, "r");
byte[] buff = new byte[2];
reader.readByte(buff);
System.out.println(new String(buff,"UTF-8");
这样出现的不是问号就是乱码,请问应该如何读取?
String str=reader.readLine();System.out.println(new String(str,"UTF-8"));
因为它的每个读取都是读一个byte,由于UTF-8的编码模式是
1110位15-12
10位11-6
10位5-0因此你每次读出来的数都是负数,因此无法处理建议在随机存取的时候不要有中文字符,如果有中文字符就用其它的类来实现。
因为要我要读取的只是个很大文件的极小部份,分散在文件中。所以我想这种方法最快了。
看了上面的回复我本想这样做的,如果是UTF-8汉字那么应该是1110xxxx作为第一个字节的。和0xffff与一下,如果结果是-17那么就再读取2个字节。3个字节放在一个类型是byte长度为3的数组中buff。
new String(buff,"UTF-8")这样来得到结果。
可是和我想的好像还是有点出入
http://hi.baidu.com/1liufeilong/blog/item/0e15f80fff1f63f2aa6457da.html
这个你可以看看,应该会明白点