Estou tentando usar uma constante em vez de uma string literal neste pedaço de código:
new InputStreamReader(new FileInputStream(file), "UTF-8")
"UTF-8"
aparece no código com bastante frequência e seria muito melhor se referir a alguma static final
variável. Você sabe onde posso encontrar essa variável no JDK?
BTW, pensando bem, essas constantes são de design ruim: literais estáticos públicos ... não são uma solução para duplicação de dados
Files.newBufferedWriter(Path path, Charset cs)
do NIO.Respostas:
No Java 1.7+, java.nio.charset.StandardCharsets define constantes para
Charset
inclusãoUTF_8
.Para Android: minSdk 19
fonte
.toString()
funcionará, mas a função adequada é.name()
. 99,9% toString não é a resposta..displayName()
também funcionará, a menos que seja substituído pela localização conforme pretendido.name()
. Você pode transmitir diretamente oCharset
objeto para oInputStreamReader
construtor.String
, talvez por motivos legados. Nesses casos, mantenho umCharset
objeto por perto, normalmente derivado deStandardCharsets
, e usoname()
se necessário.Agora eu uso
org.apache.commons.lang3.CharEncoding.UTF_8
constante de commons-lang .fonte
org.apache.commons.lang3.CharEncoding.UTF_8
. (Observe "lang3").O Google Guava biblioteca (que eu recomendo qualquer maneira, se você está fazendo um trabalho em Java) tem uma
Charsets
classe com campos estáticos, comoCharsets.UTF_8
,Charsets.UTF_16
, etc.Desde o Java 7, você deve usar apenas
java.nio.charset.StandardCharsets
para constantes comparáveis.Observe que essas constantes não são cadeias de caracteres, são
Charset
instâncias reais . Todas as APIs padrão que usam um nome de conjunto de caracteres também têm uma sobrecarga que leva umCharset
objeto que você deve usar.fonte
java.nio.charset.StandardCharsets
quando possível, o que não é um código de terceiros. Além disso, as definições de Guava Charsets não são "constantemente modificadas" e o AFAIK nunca quebrou a compatibilidade com versões anteriores, portanto, não acho que suas críticas sejam justificadas.Charsets
classe. Se você quiser reclamar sobre a goiaba, tudo bem, mas este não é o lugar para essas reclamações.Caso essa página apareça na pesquisa na web de alguém, a partir do Java 1.7, agora você pode usar java.nio.charset.StandardCharsets para obter acesso a definições constantes de charsets padrão.
fonte
Files.readAllLines(Paths.get("path-to-some-file"), StandardCharsets.UTF_8);
Esta constante está disponível (entre outros como:
UTF-16
,US-ASCII
, etc.) na classeorg.apache.commons.codec.CharEncoding
bem.fonte
Não há (pelo menos na biblioteca Java padrão). Os conjuntos de caracteres variam de plataforma para plataforma, portanto, não há uma lista padrão deles em Java.
Existem algumas bibliotecas de terceiros que contêm essas constantes. Uma delas é o Guava (bibliotecas principais do Google): http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Charsets.html
fonte
StandardCharsets
É garantido que todos os conjuntos de caracteres definidos em todas as implementações Java em todas as plataformas.Você pode usar
Charset.defaultCharset()
API oufile.encoding
propriedade.Mas se você quiser sua própria constante, precisará defini-la.
fonte
Em Java 1.7+
Não use a string "UTF-8", use o
Charset
parâmetro type:fonte
Se você estiver usando o OkHttp para Java / Android, poderá usar a seguinte constante:
fonte
Charset.forName("UTF-8").name()
quando você precisar de suporte para menor Android do que API 19+ caso contrário, você pode usar:StandardCharsets.UTF_8.name()
Definições constantes para o padrão. É garantido que esses charsets estejam disponíveis em todas as implementações da plataforma Java. desde 1,7
fonte
A classe
org.apache.commons.lang3.CharEncoding.UTF_8
foi descontinuada após a introdução do Java 7java.nio.charset.StandardCharsets
fonte