J'essaie d'utiliser une constante au lieu d'un littéral chaîne dans ce morceau de code:
new InputStreamReader(new FileInputStream(file), "UTF-8")
"UTF-8"
apparaît assez souvent dans le code et il serait préférable de faire référence à une variable static final
. Savez-vous où je peux trouver une telle variable dans JDK?
BTW, à bien y penser, ces constantes sont de mauvaise conception: Les littéraux statiques publics ... ne sont pas une solution pour la duplication de données
Dans Java 1.7+, Java.nio.charset.StandardCharsets définit les constantes pour Charset
, notamment UTF_8
.
import Java.nio.charset.StandardCharsets;
...
StandardCharsets.UTF_8.name();
Pour Android: minSdk 19
Maintenant, j'utilise org.Apache.commons.lang3.CharEncoding.UTF_8
constante de commons-lang .
La bibliothèque Google Guava (que je recommanderais de toute façon si vous travaillez en Java) a une classe Charsets
avec des champs statiques tels que Charsets.UTF_8
, Charsets.UTF_16
, etc.
Depuis Java 7, vous devriez simplement utiliser Java.nio.charset.StandardCharsets
pour des constantes comparables.
Notez que ces constantes ne sont pas des chaînes, mais des instances réelles de Charset
. Toutes les API standard qui prennent un nom de jeu de caractères ont également une surcharge qui prend un objet Charset
que vous devriez utiliser à la place.
Si cette page s'affiche dans la recherche Web de quelqu'un, à partir de Java 1.7, vous pouvez maintenant utiliser Java.nio.charset.StandardCharsets pour accéder aux définitions constantes des jeux de caractères standard.
Il n'y en a pas (du moins dans la bibliothèque standard Java.). Les jeux de caractères varient d'une plate-forme à l'autre. Il n'existe donc pas de liste standard en Java.
Cependant, certaines bibliothèques tierces contiennent ces constantes. L’un d’eux est Guava (bibliothèques principales de Google): http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Charsets.html
Cette constante est disponible (entre autres comme: UTF-16
, US-ASCII
, etc.) dans la classe org.Apache.commons.codec.CharEncoding
.
Vous pouvez utiliser la propriété Charset.defaultCharset()
API ou file.encoding
.
Mais si vous voulez votre propre constante, vous devrez la définir vous-même.
Dans Java 1.7+
N'utilisez pas la chaîne "UTF-8", utilisez plutôt le paramètre Charset
type:
import Java.nio.charset.StandardCharsets
...
new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8);
Définitions constantes pour la norme. Ces jeux de caractères sont assurément disponibles sur chaque implémentation de la plate-forme Java. depuis 1.7
package Java.nio.charset;
Charset utf8 = StandardCharsets.UTF_8;
Si vous utilisez OkHttp pour Java/Android, vous pouvez utiliser la constante suivante:
import com.squareup.okhttp.internal.Util;
Util.UTF_8; // Charset
Util.UTF_8.name(); // String