u 00ff之后的Java Unicode字符

时间:2013-08-04 18:59:11

标签: java eclipse unicode

我无法在00ff之后打印unicode值而不是我得到'?'在Eclipse中执行此操作后的字符。这是一种可以预期的行为吗?

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

4 个答案:

答案 0 :(得分:5)

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

enter image description here

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

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

另见:

答案 1 :(得分: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上正确打印。

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

答案 2 :(得分:0)

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

除非该编码类似于UTF-8或UTF-16,否则它将无法对Unicode中的每个字符进行编码。当遇到无法表示的角色时,它将被替换为问号。

答案 3 :(得分:0)

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

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

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

  

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

在命令行上。

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

因此,这适用于命令行和 Eclipse ,并且无需在源代码中明确定义编码。


如果值设置为

  

java -Dfile.encoding = iso-8859-1

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


还有两件事要记住:

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

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