【发布时间】:2012-02-25 15:04:37
【问题描述】:
以下简单测试失败:
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”。
【问题讨论】:
标签: java