47

我们尝试从字符串转换为Byte[]使用以下 Java 代码:

String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16");

我们得到一个长度为 22 字节的字节数组,我们不确定这个填充是从哪里来的。如何获得长度为 20 的数组?

4

4 回答 4

71

亚历山大的回答解释了它为什么存在,但没有解释如何摆脱它。您只需在编码名称中指定所需的字节顺序:

String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16LE"); // Or UTF-16BE
于 2008-10-23T08:53:15.700 回答
25

可能前两个字节是Byte Order Mark。它指定编码中使用的每个 16 位字中的字节顺序。

于 2008-10-23T08:50:31.293 回答
7

尝试以十六进制打印字节以查看额外的 2 个字节添加到何处 - 它们是在开头还是结尾?

我选择你会在开头找到一个字节顺序标记(0xFEFF)——这允许任何消费(接收)字节数组的人识别编码是小端还是大端。

于 2008-10-23T08:52:42.893 回答
7

UTF 在开头有一个字节顺序标记,表明该流是以特定格式编码的。正如其他用户指出的那样,第
一个字节是 0XFE
第二个字节是 0XFF
其余字节是
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57

于 2008-10-23T08:59:48.480 回答