lundi 26 août 2013

Fichier de propriétés Maven mal encodé. [2/2]

Pourquoi donc, lorsque le fichier est chargé l'encodage n'est pas bon ?

Si on reprend le code et que l'on va plus loin :
public static Properties loadPropertyFile( File propFile, Properties baseProps )
    throws IOException
{
    if ( !propFile.exists() )
    {
        throw new FileNotFoundException( propFile.toString() );
    }
    final Properties fileProps = new Properties();
    final FileInputStream inStream = new FileInputStream( propFile );
    try {
        fileProps.load(inStream) ;
    }
 ....

On constate que c'est la classe java.util.Properties qui charge les fichiers de propriétés.
Or dans la java doc (http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html) on lit :
"except the input/output stream is encoded in ISO 8859-1 character encoding"

"The native2ascii tool can be used to convert property files to and from other character encodings."

Donc, la classe java.util.Properties ne gère que l'ISO 8859-1.
Pour palier ce problème, depuis java 1.6, il existe une méthode public synchronized void load(Reader reader) throws IOException qui prend un objet type java.io.BufferedReader qui couplé avec java.io.InputStreamReader permet le support d'encodage différent.
Cet encodage différent peut soit être configuré via le constructeur, soit via -Dfile.encoding=UTF8.

Aucun commentaire:

Enregistrer un commentaire