当我写一些西里尔文字时, System.out.println("Русский язык") - 然后它超过了这个╨єёёъшщ ч√ъ,使用 Windows 控制台,如何解决这个问题?,文件编码是 utf-8,但它没关系,当它是 ansii 或 windows-1251 时,它输出相同。
问问题
14822 次
3 回答
9
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 ,因为它可以打印希腊语和俄语。
于 2012-04-13T22:13:13.880 回答
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);
于 2012-04-13T19:24:37.267 回答
0
由于历史原因(还记得 DOS 吗?),Windows 控制台使用 Cyrillic 编码 CP866。Windows 控制台绝对不支持 Unicode。
(唉,我周围没有 Windows 机器来提供经过测试的代码片段。)
于 2012-04-13T19:32:32.197 回答