4

考虑一个简单的例子:

System.out.println("¬");
System.out.println((int)(('¬')));
System.out.println((char)170);

我得到的输出如下(从示例代码开始):

¬
172
ª

为什么会出现这种情况?我查看了字符 170 的 ASCII 图表,它说它确实是¬. 甚至(在 Windows 上),当一个Alt+170 时,我得到¬.

有什么我想念的吗?

4

4 回答 4

2

Java 的(内部)默认字符集是 UTF-16 (Unicode)。

十进制 170 是 AA 十六进制,所以你的角色是 FEMININE ORDINAL INDICATOR,见这里

原始数据类型的文档指出:

char:char 数据类型是单个 16 位 Unicode 字符。它的最小值为“\u0000”(或 0),最大值为“\uffff”(或 65,535,包括在内)。

于 2012-11-29T12:13:48.350 回答
0

不,如果您没有明确指定,Java 是 UTF。看看http://www.utf8-chartable.de/你会发现 unicode U+00AC (==172) 是否定符号,unicode U+00AA (==170) 是阴性序数字符。

干杯,

于 2012-11-29T12:15:48.760 回答
0

ASCII(维基百科)只有 128 个字符。

因此,您正在某种“增强的 ASCII”表中查找表,可能是 Latin-1 / ISO-8859-1 字符集,而 Java 使用Unicode,通常是两个字节的 Unicode 变体。

Unicode 字符列表(维基百科)与 Java 所做的一致。

于 2012-11-29T12:16:40.347 回答
0

如果您真的想在 system.out 中打印它,请使用 unicode 等效项,如下所示;

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

希望这可以帮助。

于 2012-11-29T12:29:06.240 回答