Ci sono diversi modi per convertire un array di byte in una stringa in Java, ma il modo più diretto è quello di utilizzare il costruttore String che accetta un array di byte, cioè new String(byte ), ma la cosa fondamentale da ricordare è la codifica dei caratteri. Dato che i byte sono dati binari ma la stringa è un dato di carattere, è molto importante conoscere la codifica originale del carattere del testo da cui è stato creato l’array di byte. Se usate una codifica di caratteri diversa, non riavrete la stringa originale. Per esempio, se avete letto quel byte array da un file che era codificato in “ISO-8859-1” e non avete fornito alcuna codifica di caratteri durante la conversione del byte array in String utilizzando il costruttore new String() allora non è garantito che otterrete lo stesso testo indietro? Perché? Perché new String() di default usa la codifica predefinita della piattaforma (ad esempio la macchina Linux dove è in esecuzione la JVM), che potrebbe essere diversa da “ISO-8859-1”.
Se è diversa si possono vedere alcuni caratteri spazzatura o anche caratteri diversi che cambiano completamente il significato del testo e non lo sto dicendo leggendo alcuni libri, ma ho affrontato questo problema in uno dei miei progetti dove stiamo leggendo dati dal database che contiene alcuni caratteri francesi.
In assenza di qualsiasi codifica specificata, la nostra piattaforma ha scelto di default qualcosa che non è in grado di convertire correttamente tutti quei caratteri speciali, non ricordo la codifica esatta. Quel problema è stato risolto fornendo “UTF-8” come codifica dei caratteri durante la conversione dell’array di byte in stringa. Sì, c’è un altro costruttore sovraccaricato nella classe String che accetta la codifica dei caratteri, cioè new String(byte, “character encoding”).
BTW, se sei nuovo nel mondo della codifica dei caratteri e non capisci cos’è UTF-8 o UTF-16, ti consiglio di leggere il mio articolo differenza tra UTF-8, UTF-16, e codifica UTF-32. Questo non solo vi spiegherà la differenza, ma vi darà anche qualche idea di base sulla codifica dei caratteri.
Un altro articolo che vi consiglio di leggere è su come Java si occupa della codifica dei caratteri di default. Dal momento che molte classi che eseguono la conversione tra byte e carattere memorizzano la codifica dei caratteri, è importante imparare come fornire la corretta codifica a livello di JVM. Se questo vi interessa, ecco il link all’articolo completo.

Come convertire un array di byte in una stringa in Java

Tutto è 0 e 1 nel mondo dei computer, eppure siamo in grado di vedere cose diverse, ad esempio testo, immagini, file musicali ecc. La chiave per convertire una matrice di byte in una stringa è la codifica dei caratteri. In parole povere, i valori dei byte sono valori numerici e la codifica dei caratteri è la mappa che fornisce un carattere per un particolare byte.
Per esempio nella maggior parte degli schemi di codifica dei caratteri, per esempio UTF-8, se il valore del byte è 65, il carattere è A, per 66 è B. Poiché il carattere ASCII che include numeri, alfabeti e alcuni caratteri speciali è molto popolare, ha lo stesso valore nella maggior parte degli schemi di codifica. Ma questo non è vero per ogni valore di byte, per esempio -10 può essere diverso in UTF-8 e nello schema di codifica Windows-1252.
Puoi anche leggere Core Java Volume 1 – Fundamentals o Core Java for Impatient di Cay S. Horstmann per imparare di più sulla conversione di byte in caratteri in Java. Il secondo libro copre anche Java SE 8, uno dei libri più aggiornati sul mercato al momento.

byte array to String in Java
Ora qualcuno può mettere in dubbio che, poiché il byte ha 8 bit, può rappresentare solo un massimo di 255 caratteri, che è abbastanza meno date tante lingue nel mondo. Ecco perché abbiamo schemi di codifica dei caratteri multi-byte, che possono rappresentare molti caratteri. Perché abbiamo bisogno di convertire i byte in stringhe? Un esempio del mondo reale è quello di visualizzare dati codificati in base 64 come testo. Per farlo, è necessario convertire un array di byte in una stringa esagonale come mostrato in questo tutorial.

Java Byte Array to String Example

Byte array to String in Java with Example Ora sappiamo un po’ di teoria su come convertire un array di byte in una stringa, vediamo un esempio di lavoro. Per rendere l’esempio semplice, ho creato un array di byte nel programma stesso e poi ho convertito quell’array di byte in stringa usando diverse codifiche di caratteri, ad esempio cp1252, che è la codifica di default in Eclipse, windows1252 un’altra codifica popolare in Windows e UTF-8, che è una codifica di default standard nel mondo. Se eseguite questo programma e guardate l’output noterete che la maggior parte dei caratteri sono gli stessi in tutte e tre le codifiche, sono per lo più caratteri ASCII contenenti alfabeti sia maiuscoli che minuscoli e numeri, ma i caratteri speciali sono resi in modo diverso. È qui che l’uso di una codifica errata dei caratteri può creare problemi. Il resto dell’esempio è abbastanza semplice, dato che abbiamo già un array di byte e stiamo solo usando il costruttore sovraccarico di String che accetta anche la codifica. Per un esempio più complesso, dove leggiamo il contenuto di un file XML, vedi questo tutorial. Ci sono anche caratteri stampabili e non stampabili in ASCII, che sono gestiti in modo diverso da diverse codifiche di caratteri.

import java.io.UnsupportedEncodingException;public class ByteArrayToStringDemo { public static void main(String args) throws UnsupportedEncodingException { byte random = new byte { 67, 65, 70, 69, 66, 65, 66, 69, -20}; String utf = new String(random, "UTF-8"); String cp1252 = new String(random, "Cp1252"); String windows1252 = new String(random, "Windows-1252"); System.out.println("Stringa creata da array di byte in codifica UTF-8 : " + utf); System.out.println("da array di byte a stringa in codifica Cp1252 : " + cp1252); System.out.println("da array di byte a stringa in codifica Windows-1252 : " + windows1252); }}Output :Stringa creata da array di byte in codifica UTF-8 : CAFEBABE?da array di byte a stringa in codifica Cp1252: CAFEBABEì da array di byte a stringa in codifica Windows-1252: CAFEBABEì

Questo è tutto su come convertire array di byte in stringa in Java. Fornire sempre la codifica del carattere durante la conversione dei byte in carattere e che dovrebbe essere la stessa codifica che viene utilizzata nel testo originale. Se non lo sai allora UTF-8 è un buon default, ma non fare affidamento sulla codifica dei caratteri predefinita della piattaforma perché è soggetta a cambiamenti e potrebbe non essere UTF-8. Un’opzione migliore è quella di impostare la codifica dei caratteri per la vostra applicazione a livello di JVM per avere il controllo completo su come l’array di byte viene convertito in stringa.
Ulteriore apprendimento
Strutture di dati e algoritmi: Immersione profonda con Java
Fondamenti di Java: Il linguaggio Java
Masterclass Java completo

Categorie: Articles

0 commenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *