utf8 getbytes example convertir codification codificar array java encoding string bytearray

java - getbytes - ¿Por qué ByteArray tiene una longitud de 22 en lugar de 20?



string codification java (4)

Intente imprimir los bytes en hexadecimal para ver dónde se agregan los 2 bytes adicionales, ¿están al principio o al final?

Estoy eligiendo que encontrará un marcador de orden de bytes al inicio (0xFEFF) - esto permite que cualquier persona que consuma (reciba) la matriz de bytes reconozca si la codificación es little-endian o big-endian.

Intentamos convertir de cadena a Byte[] utilizando el siguiente código de Java:

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

Obtenemos una matriz de bytes de 22 bytes de longitud, no estamos seguros de dónde proviene este relleno. ¿Cómo obtengo una matriz de 20?


UTF tiene un marcador de orden de bytes al principio que dice que esta secuencia está codificada en un formato particular. Como los otros usuarios han señalado, el
El primer byte es 0XFE
El segundo byte es 0XFF
los bytes restantes son
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57


Puede ser que los primeros dos bytes sean la marca de orden de bytes . Especifica el orden de los bytes en cada palabra de 16 bits utilizada en la codificación.


La respuesta de Alexander explica por qué está allí, pero no cómo deshacerse de ella. Simplemente necesita especificar la endianidad que desea en el nombre de codificación:

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