eclipse 中文乱码
电脑的txt文件一般是GBK的(对于中问系统来说),
所以你不要转成utf8 ,
jvm启动时有个默认的字符集,你用那个就行了。
就是因为默认GBK的是后就这样乱码,才改的utf-8,结果还是不行。。
貌似 readLine方法确实有问题。读写汉字就是不行。
好像是readLine方法有问题,我用read(byte[],off,len);就不会乱码了。。。好神奇为神马~~~
public final String readLine() throws IOException {
StringBuffer input = new StringBuffer();
int c = -1;
boolean eol = false;
while (!eol) {
switch (c = read()) {
case -1:
case '\n':
eol = true;
break;
case '\r':
eol = true;
long cur = getFilePointer();
if ((read()) != '\n') {
seek(cur);
}
break;
default:
input.append((char)c);
break;
}
}
if ((c == -1) && (input.length() == 0)) {
return null;
}
return input.toString();
}
电脑的txt文件一般是GBK的(对于中问系统来说),
所以你不要转成utf8 ,
jvm启动时有个默认的字符集,你用那个就行了。
就是因为默认GBK的是后就这样乱码,才改的utf-8,结果还是不行。。
貌似 readLine方法确实有问题。读写汉字就是不行。
好像是readLine方法有问题,我用read(byte[],off,len);就不会乱码了。。。好神奇为神马~~~
看了下源码
RandomAccessFile readLine的时候是按字节读的,然后把byte转换成了char,java的char是2个byte,也就是说把汉字的高字节和低字节前各补了0。所以字符乱了
public final String readLine() throws IOException {
StringBuffer input = new StringBuffer();
int c = -1;
boolean eol = false;
while (!eol) {
switch (c = read()) {
case -1:
case '\n':
eol = true;
break;
case '\r':
eol = true;
long cur = getFilePointer();
if ((read()) != '\n') {
seek(cur);
}
break;
default:
input.append((char)c);
break;
}
}
if ((c == -1) && (input.length() == 0)) {
return null;
}
return input.toString();
}
public class TestRandomAccessFile {
public static void main(String[] args) throws Exception {
PrintStream os=System.out;
File f = new File("D:/test2.txt");
RandomAccessFile af = new RandomAccessFile(f, "rw");
System.out.println("文件的大小:" + af.length());
//System.out.println("当前文件的初始位置:" + af.getFilePointer());
//System.out.println("读取文件的第一个字节:" + (char) af.read());
//System.out.println("当前文件的位置:" + af.getFilePointer());
System.out.println("剩余文件类容:");
String len;
while ((len=af.readLine())!= null) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for(int i=0; i< len.length(); i++){
char c = len.charAt(i);
baos.write(c);
}
os.println(baos.toString());
baos.flush();
baos.close();
}
}
}
for(int i=0; i< len.length(); i++){
byte b = (byte)len.charAt(i);
baos.write(b);
}