我有一些Java代码应该非常简单明了,不幸的是,我的结果非常奇怪。
简单地说,我正在从ASCII整数转换回字符串值。
例如,如果我这样做:
char n = (char) 152;
System.out.print(n); // should yield: ÿ.
不幸的是,这只是屈服:?
有人对此类问题有任何熟悉吗?
答案 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。