首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

eclipse 中文乱码,该如何处理

2013-09-13 
eclipse中文乱码中文出现乱码怎么解决?eclipse乱码utf-8stringjava[解决办法]电脑的txt文件一般是GBK的(对

eclipse 中文乱码


中文出现乱码怎么解决? eclipse 乱码 utf-8 string java
[解决办法]
电脑的txt文件一般是GBK的(对于中问系统来说),

所以你不要转成utf8 , 

jvm启动时有个默认的字符集,你用那个就行了。
[解决办法]
System.out.println(System.getProperty("file.encoding"));
[解决办法]
可能是有bom头,你下个notepad打开那个文件把编码改为无bom的utf8试试。以前碰到过这样的问题。
[解决办法]
引用:
Quote: 引用:

电脑的txt文件一般是GBK的(对于中问系统来说),

所以你不要转成utf8 , 

jvm启动时有个默认的字符集,你用那个就行了。

就是因为默认GBK的是后就这样乱码,才改的utf-8,结果还是不行。。


貌似 readLine方法确实有问题。读写汉字就是不行。 
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

电脑的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();
    }


[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

电脑的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);
 }

热点排行