Estoy tratando de usar una constante en lugar de un literal de cadena 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 algunos static final
variable en su lugar. ¿Sabes dónde puedo encontrar esa variable 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
Files.newBufferedWriter(Path path, Charset cs)
desde NIO.Respuestas:
En Java 1.7+, java.nio.charset.StandardCharsets define constantes para
Charset
incluirUTF_8
.Para Android: minSdk 19
fuente
.toString()
funcionará pero la función adecuada es.name()
. 99.9% toString no es la respuesta..displayName()
también funcionará a menos que se anule para la localización según lo previsto.name()
en absoluto. Puede pasar directamente elCharset
objeto alInputStreamReader
constructor.String
, tal vez por razones heredadas. En tales casos, mantengo unCharset
objeto alrededor, típicamente derivado deStandardCharsets
, y lo usoname()
si es necesario.Ahora uso
org.apache.commons.lang3.CharEncoding.UTF_8
constante de commons-lang .fuente
org.apache.commons.lang3.CharEncoding.UTF_8
. (Nota "lang3").El Google guayaba biblioteca (que recomiendo altamente todos modos, si usted está haciendo el trabajo en Java) tiene una
Charsets
clase con campos estáticos comoCharsets.UTF_8
,Charsets.UTF_16
, etc.Desde Java 7 deberías usar solo
java.nio.charset.StandardCharsets
para constantes comparables.Tenga en cuenta que estas constantes no son cadenas, son
Charset
instancias reales . Todas las API estándar que toman un nombre de juego de caracteres también tienen una sobrecarga que toma unCharset
objeto que debe usar en su lugar.fuente
java.nio.charset.StandardCharsets
cuando sea posible, que no es código de terceros. Además, las definiciones de Guava Charsets no se "modifican constantemente" y AFAIK nunca ha roto la compatibilidad con versiones anteriores, por lo que no creo que su crítica esté justificada.Charsets
clase. Si quiere quejarse de la guayaba, está bien, pero este no es el lugar para esas quejas.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 charsets estándar.
fuente
Files.readAllLines(Paths.get("path-to-some-file"), StandardCharsets.UTF_8);
Esta constante está disponible (entre otros como:
UTF-16
,US-ASCII
, etc.) en la claseorg.apache.commons.codec.CharEncoding
así.fuente
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. Una de ellas es Guava (bibliotecas principales de Google): http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Charsets.html
fuente
StandardCharsets
Se garantiza que todos los charsets definidos en existen en cada implementación de Java en cada plataforma.Puede usar
Charset.defaultCharset()
API ofile.encoding
propiedad.Pero si quieres tu propia constante, deberás definirla tú mismo.
fuente
En Java 1.7+
No use la cadena "UTF-8", en su lugar use el
Charset
parámetro tipo:fuente
Si está utilizando OkHttp para Java / Android, puede usar la siguiente constante:
fuente
Charset.forName("UTF-8").name()
cuando necesite soporte para Android inferior a API 19+, de lo contrario puede usar:StandardCharsets.UTF_8.name()
Definiciones constantes para el estándar. Se garantiza que estos conjuntos de caracteres estarán disponibles en todas las implementaciones de la plataforma Java. desde 1.7
fuente
La clase
org.apache.commons.lang3.CharEncoding.UTF_8
está en desuso después de la introducción de Java 7java.nio.charset.StandardCharsets
fuente