gpt4 book ai didi

Java Unicode 混淆

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:40:00 26 4
gpt4 key购买 nike

大家好,我才刚刚开始尝试学习 Java,遇到了一些非常令人困惑的事情!

我正在输入我正在使用的书中的示例。这是为了证明字符数据类型。

代码如下:

public class CharDemo
{
public static void main(String [] args)
{
char a = 'A';
char b = (char) (a + 1);
System.out.println(a + b);
System.out.println("a + b is " + a + b);
int x = 75;
char y = (char) x;
char half = '\u00AB';
System.out.println("y is " + y + " and half is " + half);
}
}

让我困惑的一点是语句,char half = '\u00AB'。书中指出\u00AB 是符号“1/2”的代码。如前所述,当我从 cmd 编译并运行程序时,该行生成的符号实际上是“1/2”。

所以一切似乎都在按预期工作。我决定尝试使用代码并尝试一些不同的 unicode。我搜索了多个 unicode 表,发现没有一个与上述结果一致。

在我发现的每一个中,它都声明代码/u00AB 不是用于“1/2”,而实际上是用于此:

http://www.fileformat.info/info/unic...r/ab/index.htm那么Java使用的是什么字符集,我认为UNicode应该就是那个,Uni,只有一个。我已经搜索了几个小时,但在任何地方都找不到表明/u00AB 等于 1/2 的字符集,但这是我的 Java 编译器将其解释为的内容。

我一定是遗漏了一些明显的东西!感谢您的帮助!

最佳答案

这是 Windows 平台上控制台编码不匹配的一个众所周知的问题。

Java 运行时期望系统控制台使用的编码与系统默认编码相同。但是,Windows 使用两种不同的编码:ANSI code page (system default encoding) and OEM code page (console encoding) .

因此,当您尝试将 Unicode 字符 U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 写入控制台时,Java 运行时期望控制台编码是 ANSI 编码(即 Windows-1252你的情况),其中此 Unicode 字符表示为 0xAB。但是,实际的控制台编码是 OEM 编码(在您的情况下为 CP437),其中 0xAB 表示 ½

因此使用 System.out.println() 将数据打印到 Windows 控制台会产生错误的结果。

要获得正确的结果,您可以改用 System.console().writer().println()

关于Java Unicode 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4747358/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com