Adr*_*ian 5 java unicode encoding cmd utf-8
我在Windows控制台中打印出一个unicode符号时遇到问题.
这是打印出unicode符号值的java代码;
System.out.print("\u22A2 ");
Run Code Online (Sandbox Code Playgroud)
当我在Eclipse中使用UTF-8编码设置运行程序时,问题不存在,但是当涉及到Windows控制台时,符号会被问号替换.
以下是为了尝试克服这个问题,没有成功;
将Windows控制台的字体更改为Lucida Console.
每次我运行Windows控制台时,我都会更改编码设置,即使用 chcp 65001
我尝试了几次的额外步骤是运行带有参数的java文件,即java -Dfile.encoding=UTF-8 Filter(其中"Filter"是类的名称)
小智 7
默认情况下,在Windows 的CMD中使用的代码页是437.您可以通过在提示符中运行此命令来进行测试:
C:\>chcp
Active code page: 437
Run Code Online (Sandbox Code Playgroud)
而且,此代码页会阻止您正确显示Unicode字符!您必须将代码页更改为65001并为此目的使用-Dfile.encoding = UTF-8.
C:\>chcp 65001
Active code page: 65001
C:\>java -jar -Dfile.encoding=UTF-8 path/to/your/runnable/jar
Run Code Online (Sandbox Code Playgroud)
除了您采取的步骤之外,您还需要一个 PrintStream/PrintWriter 将打印的字符编码为 UTF-8。
不幸的是,Java 设计者选择使用所谓的“默认”编码打开标准流,这在 Windows 下几乎总是不可用*)。因此,天真地使用System.out和System.err将使您的程序输出显示不同,具体取决于您运行它的位置。这与目标背道而驰:编译一次,在任何地方运行。
*)这将是一些非标准的“代码页”,除了微软在这个星球上没有人承认。而且 AFAIK,例如,如果您有一个德语键盘和一个“德语”OEM Windows,并且您希望在您的家乡时区有日期和时间,那么就没有办法说:但是我想要 UTF-8 输入/输出我的 CMD 窗口。这就是为什么我大部分时间都启动双 Ubuntu 的原因之一,不用说终端执行 UTF-8。
以下通常适用于 JDK7:
public static PrintWriter stdout = new PrintWriter(
new OutputStreamWriter(System.out, StandardCharsets.UTF_8),
true);
Run Code Online (Sandbox Code Playgroud)
对于古老的 Java 版本,我替换StandardCharsets.UTF_8为Charset.forName("UTF-8")
| 归档时间: |
|
| 查看次数: |
10725 次 |
| 最近记录: |