美文网首页
java编码的一个小坑

java编码的一个小坑

作者: 风驰电掣一瓜牛 | 来源:发表于2017-06-02 22:17 被阅读0次

    问题是这样的: 当一行一行读取中文文件时,调用println输出的是乱码,将InputStreamReader设置为正确的编码还是不行

    代码如下:

    import java.io.FileInputStream;
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.IOException;
    import java.io.PrintStream;  
    
    public class test {
        public static void main(String []args) throws IOException {
    
            BufferedReader reader = new BufferedReader(
                new InputStreamReader(
                        new FileInputStream(
                                args[0]),
                        "UTF-8"));
            String title = reader.readLine();
            System.out.println(title);
            //PrintStream out = new PrintStream(System.out, true, "UTF-8");
            //out.println(title);
            reader.close();
        }   
    }
    

    网上搜了老半天,终于找到原因: system.out.println按照系统编码打印

    于是输入locale命令查看系统编码,显示为C,怪不得是乱码。

    将系统编码设置为utf8的: export LANG=en_US.utf8 (参考 http://blog.csdn.net/lwm_1985/article/details/8509506

    再次运行输出就正常了。

    如果不想改变系统编码,在代码中也可以更改,如:

    PrintStream out = new PrintStream(System.out, true, "UTF-8");
    out.println(title);
    

    或者这样:

    System.setOut(new PrintStream(System.out, true, "utf-8"));
    System.out.println(title);

    相关文章

      网友评论

          本文标题:java编码的一个小坑

          本文链接:https://www.haomeiwen.com/subject/igxpfxtx.html