JAva符号化の小さな穴

1331 ワード

問題は、1行1行が中国語ファイルを読み込むと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と表示します.
システムコードをutf 8に設定:export LANG=en_US.utf 8(参照)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);