web-dev-qa-db-fra.com

Où obtenir le littéral de chaîne "UTF-8" en Java?

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

434
yegor256

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

758
Roger

Maintenant, j'utilise org.Apache.commons.lang3.CharEncoding.UTF_8 constante de commons-lang .

128
yegor256

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.

60
Daniel Pryden

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.

46
cosjav

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

8
tskuzzy

Cette constante est disponible (entre autres comme: UTF-16, US-ASCII, etc.) dans la classe org.Apache.commons.codec.CharEncoding.

7
Alfredo Carrillo

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.

7
paulsm4

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);
3
Mostafa Vatanpour

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;
3
Vazgen Torosyan

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
2
JJD