¿Dónde obtener el literal de cadena “UTF-8” en Java?
⏰ 4 minutos de lectura
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?
.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 el Charset objeto en el InputStreamReader 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 un Charset objeto alrededor, típicamente derivado de StandardCharsetsy use name() 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_16etc.
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-ASCIIetc.) 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.
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
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
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