西里尔在窗口控制台(JAVA)的System.out.println();西里尔在窗口控制台(JAV

2019-05-13 12:31发布

当我写一些古斯拉夫语,的System.out.println(“Русскийязык”) - 那么它outpus这个╨єёёъшщч√ъ,使用Windows控制台,怎么可以这样?固定的文件编码是UTF-8,但没关系,当它是ANSII或Windows-1251,它是outputing相同。

Answer 1:

import java.io.PrintStream;
class Kyrill {
    public static void main(String args[])
        throws java.io.UnsupportedEncodingException
    {
        String ru = "Русский язык";
        PrintStream ps = new PrintStream(System.out, true, "UTF-8");
        System.out.println(ru.length());
        System.out.println(ru);
        ps.println(ru);
    }
}

D:\Temp :: chcp 65001
Aktive Codepage: 65001.

D:\Temp :: javac -encoding utf-8 Kyrill.java && java Kyrill
12
??????? ????
Русский языкй язык

请注意,您可能会看到一些尾随垃圾输出(我),但如果你的输出重定向到一个文件,你会看到,这只是一个假象显示。

所以,你可以把它用工作的PrintStream 。 该System.out中使用该平台的编码(CP1252对我来说),而且没有西里尔字母。

附加说明你神交编码业务:

D:\Temp :: chcp 1251
Aktive Codepage: 1251.
:: This is another codepage (8 bits only) that maps bytes to cyrillic characters.
:: Edit the source file to have:
::      PrintStream ps = new PrintStream(System.out, true, "Windows-1251");
:: We intend to match the console output; else we won't get the expected result.
D:\Temp :: javac -encoding utf-8 Kyrill.java && java Kyrill
12
??????? ????
Русский язык

所以,你可以看到,相反,有些人认为,在Windows控制台不会在不经意的意义上,它可以打印希腊和俄罗斯的Unicode神交



Answer 2:

尽管可以通过CHCP 65001切换Windows控制台为UTF-8,您可能仍然无法正常查看UTF-8输出。 这可能不是你想要的,但它至少是一个选择:你的标准输出重定向到一个文件。 源文件另存为UTF-8和使用UTF-8编码编译。 重定向输出文件可以用UTF-8的文本编辑器来查看。

String s = "Русский язык";
System.setOut(new PrintStream(new FileOutputStream("out.txt"), true, "UTF-8"));
System.out.println(s);


Answer 3:

Windows控制台使用编码CP866西里尔,由于历史的原因(还记得DOS?)。 Windows控制台肯定是不支持Unicode的。

(唉,我有没有Windows机器周围提供测试代码段。)



文章来源: cyrillic in windows Console(java) System.out.println();