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

时间:2015-02-04 21:15:40

标签: java char type-conversion ascii

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

简单地说,我正在从ASCII整数转换回字符串值。

例如,如果我这样做:

char n = (char) 152;

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

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

有人对此类问题有任何熟悉吗?

3 个答案:

答案 0 :(得分:4)

在UTF16中,字符ÿ是十进制代码255.十进制代码152是一个名为“字符串开头”的控制字符。 http://www.fileformat.info/info/unicode/char/0098/index.htm

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

答案 1 :(得分:1)

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

你试过吗

System.out.println("ÿ");

要查看您的控制台是否可以显示此字符?

答案 2 :(得分:1)

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

例如,在我的系统上,我需要使用-Dfile.encoding=UTF-8开关来运行你的类,因为我的终端(cygwin下的mintty)期待UTF-8,但Java默认为Windows-1252(或,Windows 9上的Cp1252。

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