Codifiche byte e stringhe

Se un array di byte contiene testo non Unicode, è possibile convertire il testo in Unicode con uno dei metodi del costruttore String. Al contrario, è possibile convertire un oggetto String in un array di byte di caratteri non Unicode con il metodo String.getBytes. Quando si invoca uno di questi metodi, si specifica l’identificatore di codifica come uno dei parametri.

L’esempio che segue converte i caratteri tra UTF-8 e Unicode. UTF-8 è un formato di trasmissione per Unicode che è sicuro per i file system UNIX. Il codice sorgente completo per l’esempio è nel file StringConverter.java.

Il programma StringConverter inizia creando un String contenente caratteri Unicode:

String original = new String("A" + "\u00ea" + "\u00f1" + "\u00fc" + "C");

Quando viene stampato, il String chiamato original appare come:

AêñüC

Per convertire l’oggetto String in UTF-8, invocare il metodo getBytes e specificare come parametro l’identificatore di codifica appropriato. Il metodo getBytes restituisce un array di byte in formato UTF-8. Per creare un oggetto String da un array di byte non Unicode, invocare il costruttore String con il parametro encoding. Il codice che fa queste chiamate è racchiuso in un blocco try, nel caso la codifica specificata non sia supportata:

Il programma StringConverter stampa i valori negli array utf8Bytes e defaultBytes per dimostrare un punto importante: La lunghezza del testo convertito potrebbe non essere la stessa del testo sorgente. Alcuni caratteri Unicode si traducono in singoli byte, altri in coppie o terzine di byte.

Il metodo printBytes visualizza gli array di byte invocando il metodo byteToHex, che è definito nel file sorgente, UnicodeFormatter.java. Ecco il metodo printBytes:

L’output del metodo printBytes segue. Notate che solo il primo e l’ultimo byte, i caratteri A e C, sono gli stessi in entrambi gli array:

Lascia un commento

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