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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top