gpt4 book ai didi

java - 字符串UTF8编码问题

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:34 25 4
gpt4 key购买 nike

以下简单测试失败:

assertEquals(myStringComingFromTheDB, "£");

给予:

Expected :£
Actual :£

我不明白为什么会这样,尤其是考虑到实际字符串(指定为第二个参数的字符串)的编码是错误的。 java文件保存为UTF8。

以下代码:

System.out.println(bytesToHex(myStringComingFromTheDB.getBytes()));
System.out.println(bytesToHex("£".getBytes()));

输出:

C2A3
C382C2A3

谁能解释一下为什么?

谢谢。

更新:我在 Windows 7 下工作。

更新2:与JUnit无关,下面是一个简单的例子:

byte[] bytes = "£".getBytes();
for(byte b : bytes)
{
System.out.println(Integer.toHexString(b));
}

输出:

ffffffc3
ffffff82
ffffffc2
ffffffa3

更新 3:我在 IntelliJ Idea 工作,我已经检查了选项并且编码是 UTF8。此外,它写在底部栏中,当我选择并右键单击井号时,它显示“编码(自动检测):UTF-8”。

更新 4:使用十六进制编辑器打开 java 文件,井号正确保存为“C2A3”。

最佳答案

请注意 assertEquals 按以下顺序接受参数:

assertEquals(expected, actual)

所以在您的情况下,来自 DB 的字符串是可以的,但是来自您的 Java 类的字符串不是(正如您已经注意到的那样)。我猜你从某个地方复制了 £ - 可能连同它周围的一些奇怪的字符,你的编辑器(IDE)没有打印出来(几乎可以肯定)。我有几次类似的问题,尤其是当我在 MS Windows 上工作时:例如ctrl+c & ctrl+v 从网站到 IDE。

(我在我的系统上用 UTF8 编码打印了 £ 的字节,这是 C2A3):

for (byte b: "£".getBytes()) {
System.out.println(Integer.toHexString(b));
}

另一个解决方案可能是您的文件不是真正的 UTF-8 编码。您在 Windows 或其他操作系统上工作吗?

根据问题编辑的一些其他可能的解决方案:

1) IDE 可能使用了一些其他编码。对于 eclipse ,请参阅此线程:http://www.eclipse.org/forums/index.php?t=msg&goto=543800&

2) 如果 IDE 设置和最终文件编码都没有问题,那就是编译器问题。看: Java compiler platform file encoding problem

关于java - 字符串UTF8编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9445133/

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