¿Dónde obtener el literal de cadena "UTF-8" en Java?

Resuelto yegor256 asked hace 13 años • 11 respuestas

Estoy intentando utilizar una constante en lugar de una cadena literal en este fragmento de código:

new InputStreamReader(new FileInputStream(file), "UTF-8")

"UTF-8"aparece en el código con bastante frecuencia y sería mucho mejor hacer referencia a alguna static finalvariable. ¿Sabes dónde puedo encontrar dicha variable en JDK?

Por cierto, pensándolo bien, esas constantes son un mal diseño: los literales estáticos públicos... no son una solución para la duplicación de datos

yegor256 avatar Jul 15 '11 01:07 yegor256
Aceptado

En Java 1.7+, java.nio.charset.StandardCharsets define constantes para Charsetincluir UTF_8.

import java.nio.charset.StandardCharsets;

...

StandardCharsets.UTF_8.name();

Para Android: minSdk 19

Roger avatar Apr 17 '2013 18:04 Roger

Ahora uso org.apache.commons.lang3.CharEncoding.UTF_8la constante de commons-lang .

yegor256 avatar Apr 26 '2012 08:04 yegor256

La biblioteca Google Guava (que recomiendo encarecidamente de todos modos, si estás trabajando en Java) tiene una Charsetsclase con campos estáticos como Charsets.UTF_8, Charsets.UTF_16etc.

Desde Java 7, debería utilizar java.nio.charset.StandardCharsetsconstantes comparables.

Tenga en cuenta que estas constantes no son cadenas, son Charsetinstancias reales. Todas las API estándar que toman un nombre de juego de caracteres también tienen una sobrecarga que toma un Charsetobjeto que debes usar en su lugar.

Daniel Pryden avatar Jul 14 '2011 18:07 Daniel Pryden

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.

cosjav avatar Apr 17 '2013 04:04 cosjav

Esta constante también está disponible (entre otras como: UTF-16, US-ASCII, etc.) en la clase .org.apache.commons.codec.CharEncoding

Alfredo Carrillo avatar Jan 10 '2013 22:01 Alfredo Carrillo