Le décodage est un processus de transformation d'un bloc d'octets (bytes) en une chaine de caractères en fonction d'un jeu de caractères (charset).

//Séquence d'octets
99 104 97 105 110 101 32 100 101 32 
99 97 114 97 99 116 232 114 101 115
=> Transformation (décodage) =>
//Séquence de caractères
"chaine de caractères"

L'encodage est un processus de tranformation d'une séquence de caractères en un bloc de données selon un jeu de caractères précis.

//Séquence de caractères
"chaine de caractères"
=> Transformation (encodage) =>
//Séquence d'octets
99 104 97 105 110 101 32 100 101 32 
99 97 114 97 99 116 232 114 101 115

Chaque implémentation de Java dispose d'une liste de jeux de caractères disponibles pour l'encodage et le décodage de données sur le système d'exploitation sous-jacent. Cette liste est consultable à partir de la méthode statique availableCharsets() de la classe Charset. Cependant les jeux de caractères standards de Java sont supportés par toutes les implémentations.

Jeux de caractèresDescription
US-ASCII128 caractères (27) ASCII
ISO-8859-1contient les caractères de l'alphabet latin
UTF-8256 caractères (28)
UTF-16BE65536 caractères (216) ordre Big-Endian (le premier octet le plus significatif)
UTF-16LE65536 caractères (216), ordre Little-Endian (le premier octet le moins significatif)
UTF-1665536 caractères (216)
public class JeuxCaracteres {
    public static void main(String[] args) {
        SortedMap col = Charset.availableCharsets(); 
        Set ens = col.entrySet();
        Iterator ite = ens.iterator();
        while (ite.hasNext()) {
            Map.Entry entree = (Map.Entry) ite.next();
            System.out.println(entree.getKey() + " : " + entree.getValue());
        }
    }
}

Tous les jeux de caractères disponibles sont appropriés pour la création d'un objet Charset. La méthode statique forName() permet de récupérer une instance de la classe Charset.

String nom = "UTF-8";
if(Charset.isSupported(nom)){
    Charset utf8 = Charset.forName(nom);
    //...
}

Parfois, il peut être opportun de vérifier si le jeu de caractères est bien supporté par la plateforme Java. Pour s'en assurer, il suffit d'utiliser la méthode statique isSupported(). Si le jeu de caractères n'est pas supporté par la plateforme sous-jacente, sera levé une exception UnsupportedCharsetException.

L'obtention du nom représentant le jeu de caractères, de l'objet Charset s'effectue via un appel des méthodes displayName() ou name(). L'une d'elles permet d'obtenir le nom usité dans une langue grâce au passage d'un argument de type référence Locale.

Charset cp1252 = Charset.forName("windows-1252");
String nom = cp1252.displayName();
String nomLoc = cp1252.displayName(new Locale("us");
String nomCanonique = utf16.name();

La méthode aliases() retournent une liste des alias du jeu de caractères Charset courant.

Charset utf16 = Charset.forName("ISO-8859-1");
Iterator ite = utf16.aliases().iterator();
while (ite.hasNext()) {
     String alias = ite.next().toString();
     System.out.println(alias);
}

La méthode isRegistered() indique si le jeu de caractères est référencé par l'organisation IANA.

if(cp1252.isRegistered()){
    //...
}

La méthode contains() indique si un jeu de caractères est contenu par l'objet Charset courant. Par exemple, le jeu de caractères US-ASCII est contenu par plusieurs autres jeux de caractères, à l'image de ISO-8859-1, UTF-8, etc..

Charset cp1252 = Charset.forName("windows-1252");
System.out.println(cp1252.contains(Charset.forName("US-ASCII")));
System.out.println(cp1252.contains(Charset.forName("ISO-8859-1")));