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 dans le code assez souvent, et il serait préférable de se référer à une static final
variable à la place. Savez-vous où je peux trouver une telle variable dans JDK?
BTW, après réflexion, ces constantes sont de mauvaise conception: les littéraux statiques publics ... ne sont pas une solution pour la duplication des données
Files.newBufferedWriter(Path path, Charset cs)
depuis NIO.Réponses:
Dans Java 1.7+, java.nio.charset.StandardCharsets définit les constantes à
Charset
inclureUTF_8
.Pour Android: minSdk 19
la source
.toString()
fonctionnera mais la fonction appropriée est.name()
. 99,9% toString n'est pas la réponse..displayName()
fonctionnera également à moins qu'il ne soit remplacé pour la localisation comme prévu.name()
du tout. Vous pouvez directement passer l'Charset
objet dans leInputStreamReader
constructeur.String
, peut-être pour des raisons héritées. Dans de tels cas, je garde unCharset
objet autour, généralement dérivé deStandardCharsets
, et utilisename()
si nécessaire.Maintenant, j'utilise
org.apache.commons.lang3.CharEncoding.UTF_8
constante de commons-lang .la source
org.apache.commons.lang3.CharEncoding.UTF_8
. (Notez "lang3").La bibliothèque Google Guava (que je recommande fortement de toute façon, si vous travaillez en Java) a une
Charsets
classe avec des champs statiques commeCharsets.UTF_8
,Charsets.UTF_16
, etc.Depuis Java 7, vous devez simplement utiliser à la
java.nio.charset.StandardCharsets
place des constantes comparables.Notez que ces constantes ne sont pas des chaînes, ce sont des
Charset
instances réelles . Toutes les API standard qui prennent un nom de jeu de caractères ont également une surcharge qui accepte unCharset
objet que vous devez utiliser à la place.la source
java.nio.charset.StandardCharsets
si possible, qui n'est pas un code tiers. De plus, les définitions des jeux de caractères de la goyave ne sont pas "constamment modifiées" et AFAIK n'a jamais rompu la compatibilité descendante, donc je ne pense pas que votre critique soit justifiée.Charsets
classe. Si vous voulez vous plaindre de la goyave, c'est bien, mais ce n'est pas l'endroit pour ces plaintes.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.
la source
Files.readAllLines(Paths.get("path-to-some-file"), StandardCharsets.UTF_8);
Cette constante est disponible (entre autres que:
UTF-16
,US-ASCII
, etc.) dans la classeorg.apache.commons.codec.CharEncoding
ainsi.la source
Il n'y en a pas (du moins dans la bibliothèque Java standard). Les jeux de caractères varient d'une plateforme à l'autre, il n'y a donc pas de liste standard en Java.
Il existe cependant des bibliothèques tierces qui 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
la source
StandardCharsets
sont garantis pour exister dans chaque implémentation Java sur chaque plate-forme.Vous pouvez utiliser l'
Charset.defaultCharset()
API ou lafile.encoding
propriété.Mais si vous voulez votre propre constante, vous devrez la définir vous-même.
la source
Dans Java 1.7+
N'utilisez pas de chaîne "UTF-8", utilisez plutôt le
Charset
paramètre type:la source
Si vous utilisez OkHttp pour Java / Android, vous pouvez utiliser la constante suivante:
la source
Charset.forName("UTF-8").name()
lorsque vous avez besoin d'un support pour Android inférieur à API 19+, sinon vous pouvez utiliser:StandardCharsets.UTF_8.name()
Définitions constantes pour la norme. Ces jeux de caractères sont garantis pour être disponibles sur chaque implémentation de la plate-forme Java. depuis 1.7
la source
La classe
org.apache.commons.lang3.CharEncoding.UTF_8
est déconseillée après l'introduction de Java 7java.nio.charset.StandardCharsets
la source