当我写一些古斯拉夫语,的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();