java编码的一个小坑

2017-06-02  本文已影响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);
上一篇下一篇

猜你喜欢

热点阅读