我的测试失败显示
junit.framework.ComparisonFailure:
Expected :⚕♂️️
Actual :⚕️♂️
这两个字符串看起来和我一样!我在这里错过了什么?我认为控制台隐藏了一些字符,比如可能是零宽度的木匠?
这是我的代码。我还有其他测试使用,和⚕️。它只能通过⚕️♂️
失败class Emoji {
static String unicodeStringFromCodePointStrings(String[] codePointStrings) {
StringBuilder sb = new StringBuilder();
for (String codePointString : codePointStrings) {
codePointString = codePointString.replace("U+","");
int codePoint = Integer.parseInt(codePointString, 16);
char[] chars = Character.toChars(codePoint);
sb.append(new String(chars));
}
return sb.toString();
}
}
public class EmojiTest {
@Test
public void testMultipleCompoundEmoji() {
String[] input = "U+1F469 U+200D U+2695 U+FE0F U+1F9D8 U+200D U+2642 U+FE0F".split(" ");
String output = Emoji.unicodeStringFromCodePointStrings(input);
assertEquals("⚕♂️️", output);
}
}
答案 0 :(得分:0)
第一个(预期)是
\u1F469\u200D\u2695\u1F9D8\u200D\u2642\uFE0F\uFE0F
第二个(实际)是
\u1F469\u200D\u2695\uFE0F\u1F9D8\u200D\u2642\uFE0F
如您所见,在期望值中,两个U+FE0F
字符都在最后。
他们可能看起来相同,但它们的String
值并不相同。
将文本复制/粘贴到UTF-8转换器后很容易看出差异,例如: http://www.endmemo.com/unicode/unicodeconverter.php