Je parcourais un code et suis tombé sur la ligne suivante.
Charset.forName("ASCII")
Mais quand j’ai jeté un œil à la documentation Java
US-ASCII ISO-8859-1 UTF-8 UTF-16BE UTF-16LE UTF-16
Mais le code fonctionne. Est-ce que "ASCII" et "US-ASCII" sont des synonymes dans ce contexte? ou le code prend-il une valeur par défaut puisque "ASCII" n'est pas reconnu? Et combien d'octets «ASCII» dans ce scénario représente-t-il un caractère?
La documentation souligne:
Chaque jeu de caractères a un nom canonique et peut également avoir un ou plusieurs alias. Le nom canonique est renvoyé par la méthode name de this classe. Les noms canoniques sont, par convention, généralement en majuscules. Le les alias d'un jeu de caractères sont retournés par la méthode des alias.
De plus, le javadoc de Charset.forName(String charsetName)
vous dit:
charsetName - Le nom du jeu de caractères demandé; peut être soit un nom canonique ou un alias
Avec ce code, vous pouvez en savoir plus sur les jeux de caractères:
Charset ascii = Charset.forName("US-ASCII");
System.out.println(ascii.aliases());
// [ANSI_X3.4-1968, cp367, csASCII, iso-ir-6, ASCII, iso_646.irv:1983, ANSI_X3.4-1986, ascii7, default, ISO_646.irv:1991, ISO646-US, IBM367, 646, us]
System.out.println(ascii.newEncoder().maxBytesPerChar());
// 1.0
Charset utf8 = Charset.forName("UTF-8");
System.out.println(utf8.newEncoder().maxBytesPerChar());
// 3.0
L'exécution de l'extrait suivant imprime tous les jeux de caractères disponibles:
SortedMap<String,Charset> availableCharsets = Charset.availableCharsets();
Set<String> keySet = availableCharsets.keySet();
for (String key : keySet) {
System.out.println(key);
}
Je ne vois pas ASCII dans la liste. En examinant le code de defaultCharset()
dans la classe Charset, on constate que si file.encoding
est invalide, la valeur par défaut est 'utf-8'.
L'exécution de l'extrait suivant imprime 'UTF-8' en tant que jeu de caractères par défaut.
System.setProperty("file.encoding", "ASCII");
System.out.println(Charset.defaultCharset());
ASCII est un alias pour US-ASCII. Il utilise un octet de 7 bits pour chaque caractère.
Remarque: si vous voulez de la compacité et de la simplicité, je vous suggère d’utiliser ISO-8859-1. Cela utilise également 1 octet par caractère mais a une plage plus large. Il supporte \u0000
à u00FF
alors que US-ASCII supporte \u0000
à \u007F