Вопрос

Мы пытаемся преобразовать строку в Byte [] , используя следующий код Java:

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

Мы получаем байтовый массив длиной 22 байта, мы не уверены, откуда происходит это заполнение. Как мне получить массив длиной 20?

Это было полезно?

Решение

Ответ Александра объясняет, почему он есть, а не как избавиться от этого. Вам просто нужно указать порядковый номер, который вы хотите в названии кодировки:

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

Другие советы

Первые два байта могут быть меткой порядка байтов . Он определяет порядок байтов в каждом 16-битном слове, используемом в кодировке.

Попробуйте распечатать байты в шестнадцатеричном формате, чтобы увидеть, куда добавляются дополнительные 2 байта - они в начале или в конце?

Я предполагаю, что вы найдете маркер порядка байтов в начале (0xFEFF ) - это позволяет любому потребителю (получающему) байтовый массив распознавать, является ли кодировка прямым или старшим.

UTF имеет маркер порядка байтов в начале, который сообщает, что этот поток закодирован в определенном формате. Как отмечали другие пользователи,
1-й байт 0XFE
2-й байт - 0XFF
остальные байты
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top