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。
我有一些 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.
此外,正如Radiodef指出的那样,152是一个Unicode控制字符; ÿ
的正确代码点是 255。
在UTF16中,字符ÿ是十进制代码255。十进制代码152是一个控制字符,叫做"start of string"。 http://www.fileformat.info/info/unicode/char/0098/index.htm
例如,您可能正在查看 asciitable.com 扩展代码,但这些代码不适用于 Java,即 UTF16。