【发布时间】:2017-07-09 17:22:09
【问题描述】:
我编写了一个单元测试,它控制德语字母(ä、ö、ß 等)是否存在任何编码问题
@Test
public void testBodyWithDefaultCharset() throws UnsupportedEncodingException {
when(backendDefinition.getProperty(BackendDetailsEnum.MAIL_CHARSET.getName())).thenReturn(null);
Charset defaultCharset = Charset.defaultCharset();
when(packet.getPayload()).thenReturn(defaultCharset.encode("ÄÖÜäöüß").array());
final String mailText = classUnderTest.prepareMailText(backendDefinition, packet);
assertThat(mailText, is(equalTo("ÄÖÜäöüß")));
}
此测试在 windows pc 中通过,但在 jenkins 上失败,这是一个 linux 环境。错误信息如下;
Expected: is "ÄÖÜäöüß"
but: was "???????"
我的问题是,将 mailText 与“ÄÖÜäöüß”进行比较是否有误?我认为比较两个字符串时不需要说明任何编码。
【问题讨论】:
-
Charset.defaultCharset()听起来很可疑。你能选择 UTF-8 吗? -
默认字符集在 unix 和 windows 之间可能会有所不同,我希望 windows 是
ISO-1250 (Windows)但我真的不知道在 unix 上会出现哪一个...你可以尝试使用 UTF- 8 ? -
两个环境中的默认字符集可能不同,因此结果不同。
标签: java unit-testing character-encoding