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: