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);