web-dev-qa-db-fra.com

Pourquoi byteArray a une longueur de 22 au lieu de 20?

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

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

Nous obtenons un tableau d'octets de longueur 22 octets, nous ne savons pas d'où vient ce remplissage. Comment obtenir un tableau de longueur 20?

47
mayaalpe

réponse d'Alexandre explique pourquoi il est là, mais pas comment s'en débarrasser. Il vous suffit de spécifier l'endianité que vous souhaitez dans le nom de l'encodage:

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

Les deux premiers octets peuvent être le Byte Order Mark . Il spécifie l'ordre des octets dans chaque mot 16 bits utilisé dans le codage.

25
Alexander

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 choisis que vous trouverez un marqueur 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 petit-boutien ou gros-boutien .

7
Bevan

UTF a un marqueur d'ordre d'octets au début qui indique que ce flux est codé dans un format particulier. Comme l'ont souligné les autres utilisateurs,
Le 1er octet est 0XFE
Le deuxiè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

6
anjanb