首先,我想说我花了很多时间寻找解释/解决方案。我找到了问题的提示,但没有办法解决我的特定问题。因此,至少在某些情况下,该主题似乎已被打死。
我有一个 Java 测试类,可以通过 Mime 实用程序测试正确的编码/解码。用于测试的字符串在源文件中声明,我们在处理输入字符串后使用 assertEquals() 来测试相等性。这是一个例子:
String test = "S2, =?iso-8859-1?Q?F=E4ltstr=F6m?= =?iso-8859-1?Q?,_Patrik?= S3";
String expected = "S2, Fältström, PatrikS3";
在我的编辑器(以及 Notepad++ 和 UltraEdit 等其他外部编辑器)中,如果我选择将输入字符串读取为 windows-1252 或 ISO-8859-1 编码,则会正确显示输入字符串;UTF-8 将预期的字符串显示为“F�ltstr�m”。
在 Windows 7 机器上编译和运行时,我得到以下输出:
预期:S2,F�ltstr�m,PatrikS3
实际:S2、Fältström、PatrikS3
我在命令外壳和代码编辑器中都得到了这种行为。奇怪的是,它可以在 Windows XP 机器上运行。然而,我在命令 shell 中使用 chcp 检查了代码页,并且在两种情况下都得到了相同的输出。我让它工作的唯一方法是使用“-encoding windows-1252”编译类,出于各种原因我不想这样做。
所以问题是:1)XP和Windows 7之间有什么不同导致这个失败?默认平台编码是否已更改?2) 我该如何修复它才能在 Windows 7 机器和 Linux 机器上运行?
非常感谢您的任何见解!