【发布时间】:2019-08-16 14:35:05
【问题描述】:
我有一个角色'????' Unicode 值是 U+1F62D 二进制等价于 11111011000101101 。现在我想将此字符转换为字节数组。我的步骤
1) 由于二进制表示大于 2 个字节,我使用 4 个字节
XXXXXXXX XXXXXXX1 11110110 00101101
2) 现在我将所有“X”替换为“0”
00000000 00000001 11110110 00101101
3) 十进制等价物
00000000(0) 00000001(1) 11110110(-10) 00101101(45)
这是我的代码
@Test
public void testUtf16With4Bytes() throws Exception {
assertThat(
new String(
new byte[]{0,1,-10,45},
StandardCharsets.UTF_16BE
),
is("????")
);
}
这是输出
ava.lang.AssertionError:
Expected: is "????"
but: was ""
我错过了什么?
【问题讨论】:
-
第一个字节错误。它不应该是 0x0 而是 0xD8。 en.wikipedia.org/wiki/UTF-16#Examples