47 votes

Pourquoi byteArray a-t-il une longueur de 22 au lieu de 20?

Nous essayons de convertir une chaîne en Byte[] en utilisant le code Java suivant :

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

Nous obtenons un tableau de bytes de longueur 22 bytes, nous ne sommes pas sûrs d'où vient ce padding. Comment puis-je obtenir un tableau de longueur 20 ?

70voto

Jon Skeet Points 692016

La réponse d'Alexander explique pourquoi c'est là, mais pas comment s'en débarrasser. Il vous suffit simplement de spécifier le classement que vous voulez dans le nom de l'encodage :

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

25voto

Alexander Points 4298

Peut-être que les deux premiers octets sont le Indicateur d'ordre de byte. Il spécifie l'ordre des octets dans chaque mot de 16 bits utilisé dans l'encodage.

7voto

Bevan Points 20976

Essayez d'imprimer les octets en hexadécimal pour voir où les 2 octets supplémentaires sont ajoutés - sont-ils au début ou à la fin?

Je parie que vous trouverez un indicateur d'ordre des octets au début (0xFEFF) - cela permet à toute personne consommant (recevant) le tableau d'octets de reconnaître si l'encodage est little-endian ou big-endian.

6voto

anjanb Points 5579

L'UTF a un marqueur d'ordre des octets au début qui indique que ce flux est encodé dans un format particulier. Comme l'ont souligné les autres utilisateurs, le
1er octet est 0XFE
2ème octet est 0XFF
les octets restants sont
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X