Question

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 d'octets d'une longueur de 22 octets, nous ne savons pas d'où vient ce remplissage. Comment puis-je obtenir un tableau de longueur 20?

Était-ce utile?

La solution

La réponse d'Alexander explique pourquoi c'est là, mais pas comment s'en débarrasser. Vous devez simplement spécifier l’endianité souhaitée dans le nom du codage:

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

Autres conseils

Les marque d'ordre d'octet peuvent constituer les deux premiers octets. Il spécifie l'ordre des octets dans chaque mot de 16 bits utilisé dans le codage.

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

Je pense que vous allez trouver un marqueur d'ordre d'octet au début (0xFEFF ) - cela permet à toute personne consommant (recevant) le tableau d'octets de reconnaître si le codage est little-endian ou big-endian.

UTF a un marqueur d'ordre d'octet au début qui indique que ce flux est codé dans un format particulier. Comme l'ont souligné d'autres utilisateurs, le
Le premier 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top