yegor256
Estoy tratando de usar una constante en lugar de un literal de cadena en este código:
new InputStreamReader(new FileInputStream(file), "UTF-8")
"UTF-8"
aparece en el código con bastante frecuencia, y sería mucho mejor referirse a algunos static final
variable en su lugar. ¿Sabes dónde puedo encontrar una variable de este tipo en JDK?
Por cierto, pensándolo bien, tales constantes son un mal diseño: Los literales estáticos públicos… no son una solución para la duplicación de datos
roger
En Java 1.7+, java.nio.charset.StandardCharsets define constantes para Charset
incluido UTF_8
.
import java.nio.charset.StandardCharsets;
...
StandardCharsets.UTF_8.name();
Para Android: minSdk 19
-
¿Usas .toString() en eso?
– Matt Broekhuis
22/10/2013 a las 17:30
-
.toString()
funcionará, pero la función adecuada es.name()
. 99.9% toString no es la respuesta.– roger
19 de febrero de 2014 a las 16:25
-
por cierto
.displayName()
también funcionará a menos que se anule para la localización según lo previsto.– roger
19 de febrero de 2014 a las 16:35
-
Realmente no necesitas llamar
name()
en absoluto. Puede pasar directamente elCharset
objeto en elInputStreamReader
constructor.– Natix
19 de noviembre de 2014 a las 10:33
-
Y hay otras librerías por ahí que requieren un
String
, tal vez por razones heredadas. En tales casos, mantengo unCharset
objeto alrededor, típicamente derivado deStandardCharsets
y usename()
si es necesario.– Magnilex
2 de marzo de 2015 a las 14:32
yegor256
ahora uso org.apache.commons.lang3.CharEncoding.UTF_8
constante de commons-lang.
-
Para aquellos que usan Lang 3.0:
org.apache.commons.lang3.CharEncoding.UTF_8
. (Nota “lang3”).– Russell Silva
17 de junio de 2013 a las 17:38
-
Si está utilizando Java 1.7, consulte la respuesta de @Roger a continuación, ya que es parte de la biblioteca estándar.
– Drew Stephens
4 sep 2013 a las 14:54
-
PD “La respuesta de @Roger a continuación” es ahora la respuesta de @Roger arriba. ☝
– Gary Shepard
27 de febrero de 2019 a las 12:32
-
Esa clase está en desuso desde que Java 7 introdujo java.nio.charset.StandardCharsets
– envío1982
11 de mayo de 2020 a las 3:40
daniel priden
los Google guayaba biblioteca (que recomiendo encarecidamente de todos modos, si está trabajando en Java) tiene un Charsets
clase con campos estáticos como Charsets.UTF_8
, Charsets.UTF_16
etc.
Desde Java 7 solo debes usar java.nio.charset.StandardCharsets
en cambio para constantes comparables.
Tenga en cuenta que estas constantes no son cadenas, son reales Charset
instancias. Todas las API estándar que toman un nombre de juego de caracteres también tienen una sobrecarga que toma un Charset
objeto que debe utilizar en su lugar.
-
Entonces, ¿debería ser Charsets.UTF_8.name()?
– AlikElzin-kilaka
25 de marzo de 2013 a las 8:31
-
@kilaka Sí, use name() en lugar de getDisplayName() ya que name() es definitivo y getDisplayName() no lo es
– RKumsher
27/02/2014 a las 18:40
-
@Buffalo: lea mi respuesta nuevamente: recomienda usar
java.nio.charset.StandardCharsets
cuando sea posible, que no sea un código de terceros. Además, las definiciones de Guava Charsets no se “modifican constantemente” y AFAIK nunca han roto la compatibilidad con versiones anteriores, por lo que no creo que sus críticas estén justificadas.–Daniel Pryden
13 de noviembre de 2017 a las 16:37
-
@Buffalo: Eso es lo que puede ser, pero dudo que sus problemas tengan algo que ver con el
Charsets
clase. Si quieres quejarte de Guava, está bien, pero este no es el lugar para esas quejas.–Daniel Pryden
14 de noviembre de 2017 a las 13:16
-
No incluya una biblioteca de varios megabytes para obtener una cadena constante.
–Jeffrey Blattman
9 oct 2018 a las 23:06
En caso de que esta página aparezca en la búsqueda web de alguien, a partir de Java 1.7 ahora puede usar java.nio.charset.StandardCharsets para obtener acceso a definiciones constantes de conjuntos de caracteres estándar.
Esta constante está disponible (entre otros como: UTF-16
, US-ASCII
etc.) en la clase org.apache.commons.codec.CharEncoding
también.
tkuzzy
No hay ninguno (al menos en la biblioteca estándar de Java). Los conjuntos de caracteres varían de una plataforma a otra, por lo que no hay una lista estándar de ellos en Java.
Sin embargo, hay algunas bibliotecas de terceros que contienen estas constantes. Uno de estos es Guava (bibliotecas principales de Google): http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Charsets.html
andres tobilko
Puedes usar Charset.defaultCharset()
API o file.encoding
propiedad.
Pero si quiere su propia constante, deberá definirla usted mismo.
-
El conjunto de caracteres predeterminado generalmente está determinado por el sistema operativo y la configuración regional, no creo que haya ninguna garantía de que siga siendo el mismo para múltiples invocaciones de Java. Así que esto no es un reemplazo para un “utf-8” constante de sepcificación.
– Jörn Horstmann
14 de julio de 2011 a las 21:43
Ver esta pregunta.
– altamente cafeinado
14 de julio de 2011 a las 18:51
Nota: si ya está en Java 7, use
Files.newBufferedWriter(Path path, Charset cs)
de NIO.-Franklin Yu
8 de agosto de 2018 a las 14:55
Ese es un consejo realmente malo de su enlace. ¿Él quiere que hagas una clase contenedora para cada constante de cadena posible que puedas usar?
– Ariel
25 de junio de 2020 a las 20:15