Où trouver le littéral de chaîne «UTF-8» en Java?

J’essaie d’utiliser une constante au lieu d’un littéral de 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, sur une seconde pensée, ces constantes sont de mauvaise conception: littéraux statiques publiques … ne sont pas une solution pour la duplication de données

Dans Java 1.7+, java.nio.charset.StandardCharsets définit des constantes pour Charset y compris UTF_8 .

 import java.nio.charset.StandardCharsets ... StandardCharsets.UTF_8.name(); 

Pour Android: minSdk 19

J’utilise maintenant la constante org.apache.commons.lang3.CharEncoding.UTF_8 de commons-lang .

La bibliothèque Google Guava (que je recommande vivement, si vous travaillez en Java) a une classe Charsets avec des champs statiques comme Charsets.UTF_8 , Charsets.UTF_16 , etc.

Depuis Java 7, vous devez simplement utiliser java.nio.charset.StandardCharsets place de constantes comparables.

Notez que ces constantes ne sont pas des chaînes, elles sont 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 object Charset que vous devez utiliser à la place.

Dans le cas où cette page apparaît 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 (au moins dans la bibliothèque Java standard). Les jeux de caractères varient d’une plateforme à l’autre, il n’y en a donc pas une liste standard en Java.

Il existe cependant des bibliothèques tierces qui contiennent ces constantes. L’un d’entre 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 sous la forme: UTF-16 , US-ASCII , etc.) dans la classe org.apache.commons.codec.CharEncoding .

Vous pouvez utiliser l’API Charset.defaultCharset() ou la propriété file.encoding .

Mais si vous voulez votre propre constante, vous devrez la définir vous-même.

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(); // Ssortingng 

Définitions constantes pour la norme. Ces jeux de caractères sont garantis être disponibles sur chaque implémentation de la plate-forme Java. depuis 1.7

  package java.nio.charset; Charset utf8 = StandardCharsets.UTF_8; 

Dans Java 1.7+

N’utilisez pas de chaîne “UTF-8”, utilisez plutôt un paramètre de type Charset :

 import java.nio.charset.StandardCharsets ... new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8);