我找到了一些棘手的地方,无法理解这是怎么发生的。
为什么包含一个字符的字符串可以返回不同的字节数组?
代码:
public class Application {
public static void main(String[] args) throws Exception {
char ch;
ch = 0x0001;
System.out.println(Arrays.toString(("" + ch).getBytes("UTF-8")));
ch = 0x0111;
System.out.println(Arrays.toString(("" + ch).getBytes("UTF-8")));
ch = 0x1111;
System.out.println(Arrays.toString(("" + ch).getBytes("UTF-8")));
}
}
下一步输出:
[1]
[-60,-111]
[-31,-124,-111]
为什么会发生这种情况?
答案 0 :(得分:2)
这就是UTF-8的工作原理。 0到127之间的代码点被编码为单字节值(以保持ASCII兼容性);上面的代码点被编码为2到6个字节的值。
取自here。
的截图所以,对于你的例子:
0x0001
(0b00000001
)编码为00000001
=(dec)1
0x0111
(0b00000001 00010001
)编码为11000100 10010001
=(dec)-60 -111
0x1111
(0b00010001 00010001
)编码为11100001 11100001 10010001
=(dec)-31 -124 -111