Java 从 ASCII 整数到字符的转换产生未知值

Java Conversion from ASCII Integer to Character yields unknown values

我有一些 Java 代码应该非常简单明了,不幸的是,我得到的结果很奇怪。

简而言之,我正在进行从 ASCII 整数到字符串值的基本转换。

例如,如果我这样做:

char n = (char) 152;

System.out.print(n); // should yield: ÿ.

不幸的是,这只是屈服:?

有人熟悉这类问题吗?

您要打印到的控制台可能不支持显示该字符。

你试过了吗

System.out.println("ÿ");

看看你的主机能不能显示这个字符?

当您打印 char 时,它会转换为您的默认平台编码,可能是 Windows-1252 或谁知道是什么。您可能需要告诉 Java 您的终端正在使用什么编码,但您需要知道那是什么。

例如,在我的系统上,我需要使用 -Dfile.encoding=UTF-8 开关 运行 你的 class,因为我的终端(cygwin 下的 mintty)需要 UTF-8,但是 Java 在 Windows 7.

上默认为 Windows-1252(或 Cp1252)

此外,正如Radiodef指出的那样,152是一个Unicode控制字符; ÿ 的正确代码点是 255。

在UTF16中,字符ÿ是十进制代码255。十进制代码152是一个控制字符,叫做"start of string"。 http://www.fileformat.info/info/unicode/char/0098/index.htm

例如,您可能正在查看 asciitable.com 扩展代码,但这些代码不适用于 Java,即 UTF16。