以下简单测试失败:
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”.