下面这个简单的测试失败了:
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”的形式正确保存。
aspectjtools-1.6.10.jar
而不是javac
。我还添加了参数-encoding UTF-8
。如果你修改了你的答案或者添加了一个新的答案,我会点赞并接受它 :) 谢谢! - satoshi