java编码的一个小坑

问题是这样的: 当一行一行读取中文文件时,调用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);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容