Codifica una stringa in UTF-8 in Java

1. Panoramica

Quando si ha a che fare con le stringhe in Java, a volte è necessario codificarle in un set di caratteri specifico.

Questo tutorial è una guida pratica che mostra diversi modi per codificare una stringa nel set di caratteri UTF-8 ; per un approfondimento più tecnico, consulta la nostra Guida alla codifica dei caratteri.

2. Definizione del problema

Per mostrare la codifica Java, lavoreremo con la stringa tedesca "Entwickeln Sie mit Vergnügen".

String germanString = "Entwickeln Sie mit Vergnügen"; byte[] germanBytes = germanString.getBytes(); String asciiEncodedString = new String(germanBytes, StandardCharsets.US_ASCII); assertNotEquals(asciiEncodedString, germanString);

Questa stringa codificata usando US_ASCII ci dà il valore "Entwickeln Sie mit Vergn? Gen" quando viene stampata, perché non comprende il carattere non ASCII ü . Ma quando convertiamo una stringa con codifica ASCII che utilizza tutti i caratteri inglesi in UTF-8, otteniamo la stessa stringa.

String englishString = "Develop with pleasure"; byte[] englishBytes = englishString.getBytes(); String asciiEncondedEnglishString = new String(englishBytes, StandardCharsets.US_ASCII); assertEquals(asciiEncondedEnglishString, englishString);

Vediamo cosa succede quando usiamo la codifica UTF-8.

3. Codifica con Core Java

Cominciamo con la libreria principale.

Le stringhe non sono modificabili in Java, il che significa che non è possibile modificare la codifica dei caratteri di una stringa . Per ottenere ciò che vogliamo, dobbiamo copiare i byte della stringa e quindi crearne uno nuovo con la codifica desiderata .

Innanzitutto, otteniamo i byte della stringa e, successivamente, ne creiamo uno nuovo utilizzando i byte recuperati e il set di caratteri desiderato:

String rawString = "Entwickeln Sie mit Vergnügen"; byte[] bytes = rawString.getBytes(StandardCharsets.UTF_8); String utf8EncodedString = new String(bytes, StandardCharsets.UTF_8); assertEquals(rawString, utf8EncodedString);

4. Codifica con Java 7 StandardCharsets

In alternativa, possiamo utilizzare la classe StandardCharsets introdotta in Java 7 per codificare la stringa .

Innanzitutto, decodificheremo la stringa in byte e, in secondo luogo, codificheremo la stringa in UTF-8:

String rawString = "Entwickeln Sie mit Vergnügen"; ByteBuffer buffer = StandardCharsets.UTF_8.encode(rawString); String utf8EncodedString = StandardCharsets.UTF_8.decode(buffer).toString(); assertEquals(rawString, utf8EncodedString);

5. Codifica con Commons-Codec

Oltre a utilizzare Java core, possiamo in alternativa utilizzare Apache Commons Codec per ottenere gli stessi risultati.

Apache Commons Codec è un pratico pacchetto contenente semplici codificatori e decodificatori per vari formati.

Per prima cosa, iniziamo con la configurazione del progetto. Quando si utilizza Maven, dobbiamo aggiungere la dipendenza common -codec al nostro pom.xml :

 commons-codec commons-codec 1.14 

Quindi, nel nostro caso, la classe più interessante è StringUtils , che fornisce metodi per codificare String s. Utilizzando questa classe, ottenere una stringa con codifica UTF-8 è piuttosto semplice:

String rawString = "Entwickeln Sie mit Vergnügen"; byte[] bytes = StringUtils.getBytesUtf8(rawString); String utf8EncodedString = StringUtils.newStringUtf8(bytes); assertEquals(rawString, utf8EncodedString);

6. Conclusione

Codificare una stringa in UTF-8 non è difficile, ma non è così intuitivo. Questo tutorial presenta tre modi per farlo, utilizzando Java core o utilizzando Apache Commons Codec.

Come sempre, gli esempi di codice possono essere trovati su GitHub.