Reader
et
Writer
:
InputStreamReader
et
OutputStreamWriter
respectivement.
InputStreamReader
a donc besoin de connaître l'encodage de ces caractères. Les méthodes de lecture exposées par
InputStreamReader
sont imposées par la classe
Reader
qu'elle étend, et il n'est pas possible de leur passer cette information. C'est donc à la construction de cet objet qu'il faut préciser cet encodage.
Cet encodage peut être précisé de trois manières.
CharSet
, classe du package
java.nio
, qui modélise un encodage particulier. Une instance de
CharSet
se construit en passant le nom de l'encodage choisi sous forme d'une chaîne de caractères. Les chaînes standard, que toute JVM doit supporter, sont donnés dans la suite de cette partie.
CharSetDecoder
, classe abstraite du package
java.nio
. Cet objet est capable de décoder un flux d'octets en flux de caractères.
CharSet
ou passés en paramètre du constructeur de
InputStreamReader
.
US-ASCII
: ASCII codé sur 7 bits ;
ISO-8859-1
: aussi appelé
ISO-LATIN-1
;
UTF-8
: utilisé pour l'Unicode ;
UTF-16BE
: encodage 16 bits, octet de poids fort en premier (BE =
big endian
) ;
UTF-16LE
: encodage 16 bits, octet de poids faible en premier (LE =
little endian
) ;
UTF-16
: encodage 16 bits, l'ordre des octets est identifié par un octet optionnel, appelé BOM (
byte order marker
), qui figure en premier dans le flux binaire.
InputStreamReader
expose une méthode
getEncoding()
qui permet d'obtenir le nom du jeu de caractères utilisé.
OutputStreamWriter
est rigoureusement symétrique de
InputStreamReader
. On la construit en lui passant en paramètre une indication sur le jeu de caractères qu'elle doit utiliser. Elle expose les méthodes d'écriture de la classe
Writer
, qu'elle étend.
file.encoding
. On peut obtenir la valeur de cette propriété par la méthode
System.getProperty("file.encoding")
.
Exemple 124. Propriété
file.encoding
// dans une méthode main // affichage de l'encodage courant des fichiers System.out.println(System.getProperty("file.encoding")) ; // changement de la valeur de cette propriété System.setProperty("file.encoding", "UTF-8") ; // affichage du nouvel encodage System.out.println(System.getProperty("file.encoding")) ;
Cp1252
. Le positionner à une valeur plus civilisée comme
UTF-8
est probablement une bonne idée !
String
StringBuffer
et
StringBuilder