0

I can not print the unicode values after 00ff Instead I'm getting '?' character after execution of this in Eclipse. Is that an expectable behaviour?

System.out.println("\u01ff");
4

4 回答 4

5

Eclipse 在保存基于文本的文件和写入标准输出流(由 使用System.out)期间默认使用平台默认编码(在 Windows 中为 cp1252)来解码字符。您需要将其显式设置为 UTF-8 才能实现世界统治。

在此处输入图像描述

请注意,这样您也不再需要使用那些\uXXXXUnicode 转义来表示基于文本的源文件中的这些字符。

这些问号是因为输出流使用的字符集不支持输入流中指定的字符。

也可以看看:

于 2013-08-04T19:04:06.583 回答
3

System.out问题是与;一起使用的编码。默认情况下,它是您平台的本机编码(通常不是 UTF-8)。您可以通过替换流来显式更改编码:

try {
    PrintStream ps = new PrintStream(System.out, true, "UTF-8");
    System.setOut(ps);
} catch (UnsupportedEncodingException error) {
    System.err.println(error);
}

在此之后(除非底层环境出现字体或编码问题),所有 Unicode 字符都应正确打印在System.out.

编辑基于我和 BalusC 在他的回答上的反复讨论,这还不足以(甚至没有必要)让事情在 Eclipse 中工作。您有两个问题需要解决:在写入时System.out使用正确的编码,然后在 Eclipse 控制台视图中显示控制台输出时使用正确的编码。BalusC 的回答解决了这两个问题。不幸的是,它不能解决在 Eclipse 之外运行的问题。为此,您需要使用我上面的方法或设置默认的运行时编码。这可以通过使用-Dfile.encoding=UTF-8命令行上的标志或将环境变量设置JAVA_TOOL_OPTIONS为 include 来完成-Dfile.encoding=UTF-8。要在 Eclipse 之外成功运行您的代码,那么这可能是最好的方法。

于 2013-08-04T19:06:29.353 回答
0

Java 可以很好地处理这些字符。但是输出团队会有特定的编码。

除非这种编码是 UTF-8 或 UTF-16 之类的,否则它无法对 Unicode 中的每个字符进行编码。而当它遇到一个它不能表示的字符时,它会被一个问号代替。

于 2013-08-04T19:03:58.913 回答
0

JVM 也使用默认文件编码System.out

例如,在 Linux 上,如果您的$LANG变量设置为de_DE.UTF-8,则 for 的值file.encoding将相应派生,并设置为utf-8

如果 JVM 无法派生您想要的设置,您可以通过设置系统属性来更改文件编码:

java -Dfile.encoding=utf-8 ...

在命令行上。

您也可以在Eclipse中使用运行配置来执行此操作(上下文菜单 - 运行方式 - 运行配置 ... - 参数 - VM 参数)

所以这对命令行和Eclipse都有效,并且不需要在源代码中明确定义编码。


如果该值设置为

java -Dfile.encoding=iso-8859-1

例如,只能表示 Unicode 字符的子集,因为该字符集仅支持有限数量的字符。其他的将显示为?


还有两件事要记住:

  • 接收流的设备(终端、外壳等)必须正确解码。以 GNOME 的终端为例,您可以在菜单中设置字符编码。

  • 该终端等使用的字体必须包含该字符的图形表示

于 2013-08-04T19:56:31.317 回答