Perché byteArray ha una lunghezza di 22 anziché 20?
Domanda
Proviamo a convertire da stringa a byte []
utilizzando il seguente codice Java:
String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16");
Otteniamo un array di byte di lunghezza 22 byte, non siamo sicuri da dove provenga questo padding. Come posso ottenere una matrice di lunghezza 20?
Soluzione
La risposta di Alexander spiega perché è lì, ma non come sbarazzarsi di esso. Devi semplicemente specificare l'endianness che desideri nel nome della codifica:
String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16LE"); // Or UTF-16BE
Altri suggerimenti
Possono essere i primi due byte il contrassegno di ordine di byte . Specifica l'ordine dei byte in ogni parola a 16 bit utilizzata nella codifica.
Prova a stampare i byte in esadecimale per vedere dove vengono aggiunti i 2 byte extra - sono all'inizio o alla fine?
Sto scegliendo che troverai un marcatore ordine byte all'inizio (0xFEFF ): ciò consente a chiunque utilizzi (riceve) l'array di byte di riconoscere se la codifica è little-endian o big-endian.
All'inizio UTF ha un marcatore dell'ordine dei byte che indica che questo flusso è codificato in un formato particolare. Come hanno sottolineato gli altri utenti, il
Il primo byte è 0XFE
Il secondo byte è 0XFF
i byte rimanenti sono
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57