【问题标题】:printing '\u0000' in Java在 Java 中打印 '\u0000'
【发布时间】:2012-04-12 17:12:42
【问题描述】:

当我跑步时

char c= '\u0000'; 
System.out.println(c);

在 Eclipse 中,它会打印一个小方块,表示一个空字符。
但是当我在 CLI 中运行它时它会打印“a”。
然后我在其他电脑上运行,有的打印'a',有的打印空格。

为什么会这样?

我的操作系统是 Windows 7 Professional-32bit。其他系统是 windows xp。
我的java版本是jdk_1.6.0update12。

【问题讨论】:

  • 你的命令提示符的字符编码是什么?
  • Windows 控制台无法正确处理 unicode。将其重定向到一个文件,它会显示正确的输出。
  • 如果您使用健全的字体(即不是光栅字体),Windows 控制台应该正确显示 Unicode,除非是复杂的脚本。如果您输入 Unicode,它支持 Unicode,并且使用光栅字体可以将显示转换为 OEM 代码页。

标签: java unicode char


【解决方案1】:

它不会为我打印 a:

public class Mkt {
 public static void main(String[] args) {
    char c= '\u0000'; 
    System.out.println("-" + c + "-");
  }
}

$ javac Mkt.java && java Mkt
--

这里是 Ubuntu 11.10:

$ java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)

要检查/尝试的事情:

  • 更改终端窗口的字体
  • 您是否尝试过在您的机器上使用其他 Java 版本?
  • 您的机器与您尝试过的其他机器有什么不同吗?
  • Cygwin 内尝试
  • 尝试一些不同的控制台模拟器,例如Console
  • 重定向到文件 (java Mkt > some_file.txt) 并查看其中的内容,最好使用一些十六进制编辑器
  • 制作一个小型 Swing 应用程序并在 JTextArea 中显示它,看看它是否显示相同
  • \u0001 显示什么?

【讨论】:

  • (a) 控制台窗口不是终端窗口。 (b) 没有控制台仿真器,除了 zsnes 等 - 您可能正在寻找术语»终端仿真器«,即使在 Windows 上也是错误的 - 控制台只是轮询隐藏的控制台窗口以进行更改并复制屏幕缓冲区;几乎没有魔法,也几乎没有模仿任何东西。 (c) 顺便说一下,重定向到文件继承了 Windows 控制台的相同特性。
  • 我已经检查过了,当我更改字体时,它显示一个空格。重定向到一个文件,它显示了一个小方块。所以我认为原因是 Windows 控制台没有正确处理 unicode
猜你喜欢
  • 2010-09-24
  • 2015-05-13
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 2013-08-27
相关资源
最近更新 更多