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);