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

从ASCII整数到字符的Java转换产生未知值,java,char,type-conversion,ascii,Java,Char,Type Conversion,Ascii,我有一些Java代码应该非常简单和直接,不幸的是,我得到了非常奇怪的结果 简单地说,我正在做一个从ASCII整数到字符串值的基本转换 例如,如果我这样做: char n = (char) 152; System.out.print(n); // should yield: ÿ. 不幸的是,这只会产生:? 有人熟悉这种类型的问题吗?您要打印的控制台可能不支持显示该字符 你试过了吗 System.out.println(“ÿ”) 要查看您的控制台是否可以显示此字符?当您打印字符时,它将转换为默认

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

简单地说,我正在做一个从ASCII整数到字符串值的基本转换

例如,如果我这样做:

char n = (char) 152;

System.out.print(n); // should yield: ÿ.
不幸的是,这只会产生:


有人熟悉这种类型的问题吗?

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

你试过了吗

System.out.println(“ÿ”)


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

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

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


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

在UTF16中,字符ÿ是十进制代码255。十进制代码152是一个称为“字符串开头”的控制字符


例如,您可能会看到扩展代码,但这些代码不适用于UTF16的Java。

控制台也可能支持它,但Java发出的编码与控制台期望的编码不匹配。我使用的是Microsoft命令提示符。有趣的是,这并不是说它无法打印字符串。我将原始字符串与ascii值进行比较,并将数字从其整数ascii值转换为数字,然后查看这两个字符串是否相等。在任何情况下,ÿ都是作为原始字符串的一部分生成的,当我试图清晰地打印它时,我会得到一些奇怪的颠倒4,但当我打印演员时,我会得到一个?。谢谢你的回复tho@DavidConrad,这是我遇到的一个更大问题的一部分,但为了弄清楚到底发生了什么,我注意到,如果我显式地尝试并抛出“(char)152”,它会给我一个?,所以我不确定编码和它有什么关系,因为我是硬编码152。打印语句后应该有一个分号。是的,谢谢你,这是我第一个问题,因为我能找到我在这里遇到的几乎所有问题,所以我想我有点马虎…好的。我需要让java使用不同的编码类型?我想我需要UTF-8?在UTF-8中,代码点仍然是255。Radiodef捕捉到了好消息!如果您查看的代码表,您将看到所有这些字符的代码<代码>“ÿ”
是该块中的最后一个。Java
char
始终被视为UTF16代码。该库提供了在其他编码中从字节数组转换的方法,但我不能确定您是否需要这样做。也许要做的事情是问一个关于你正在编写的程序的新问题。好的。感谢Radiodef和David Conrad的评论。如果我能找到问题的解决方案,我会将答案标记为完整,并将其与我提出的任何新问题联系起来。