Я пытаюсь использовать константу вместо строкового литерала в этом фрагменте кода:
new InputStreamReader(new FileInputStream(file), "UTF-8")
"UTF-8"
появляется в коде довольно часто, и было бы намного лучше обратиться к некоторой static final
переменной вместо этого. Вы знаете, где я могу найти такую переменную в JDK?
Кстати, подумав, такие константы - плохой дизайн: публичные статические литералы ... не являются решением для дублирования данных
Files.newBufferedWriter(Path path, Charset cs)
из NIO.Ответы:
В Java 1.7+ java.nio.charset.StandardCharsets определяет константы для
Charset
включенияUTF_8
.Для Android: minSdk 19
источник
.toString()
будет работать, но правильная функция есть.name()
. 99,9% toString не является ответом..displayName()
, также будет работать, если он не переопределен для локализации, как предполагалось.name()
вообще звонить . Вы можете напрямую передатьCharset
объект вInputStreamReader
конструктор.String
, возможно, по наследственным причинам. В таких случаях я сохраняюCharset
объект, обычно получаемый из негоStandardCharsets
, и используюname()
при необходимости.Сейчас я использую
org.apache.commons.lang3.CharEncoding.UTF_8
константу от commons-lang .источник
org.apache.commons.lang3.CharEncoding.UTF_8
. (Примечание «lang3»).В библиотеке Google Guava (которую я очень рекомендую, если вы работаете в Java) есть
Charsets
класс со статическими полями, такими какCharsets.UTF_8
,Charsets.UTF_16
и т. Д.Начиная с Java 7 вы должны просто использовать
java.nio.charset.StandardCharsets
вместо этого для сопоставимых констант.Обратите внимание, что эти константы не являются строками, они актуальны
Charset
экземпляры. Все стандартные API, которые принимают имя набора символов, также имеют перегрузку, которая принимаетCharset
объект, который вы должны использовать вместо этого.источник
java.nio.charset.StandardCharsets
возможности использовать, который не является сторонним кодом. Кроме того, определения кодировок Guava не постоянно изменяются, и AFAIK никогда не нарушал обратную совместимость, поэтому я не думаю, что ваша критика оправдана.Charsets
классу. Если вы хотите пожаловаться на гуаву, это нормально, но это не место для этих жалоб.В случае, если эта страница появляется в чьём-либо поиске в Интернете, начиная с Java 1.7, теперь вы можете использовать java.nio.charset.StandardCharsets, чтобы получить доступ к постоянным определениям стандартных кодировок.
источник
Files.readAllLines(Paths.get("path-to-some-file"), StandardCharsets.UTF_8);
Эта константа доступна ( в том числе , как:
UTF-16
,US-ASCII
и т.д.) в классе ,org.apache.commons.codec.CharEncoding
а также.источник
Их нет (по крайней мере, в стандартной библиотеке Java). Наборы символов варьируются от платформы к платформе, поэтому в Java их нет стандартного списка.
Однако есть некоторые сторонние библиотеки, которые содержат эти константы. Одним из них является Guava (основные библиотеки Google): http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Charsets.html
источник
StandardCharsets
, гарантированно существуют в каждой реализации Java на каждой платформе.Вы можете использовать
Charset.defaultCharset()
API илиfile.encoding
свойство.Но если вам нужна собственная константа, вам нужно определить ее самостоятельно.
источник
В Java 1.7+
Не используйте строку «UTF-8», вместо этого используйте
Charset
параметр типа:источник
Если вы используете OkHttp для Java / Android, вы можете использовать следующую константу:
источник
Charset.forName("UTF-8").name()
когда вам нужна поддержка более низкого Android, чем API 19+, в противном случае вы можете использовать:StandardCharsets.UTF_8.name()
Постоянные определения для стандарта. Эти кодировки гарантированно будут доступны во всех реализациях платформы Java. с 1,7
источник
Класс
org.apache.commons.lang3.CharEncoding.UTF_8
устарел после появления Java 7java.nio.charset.StandardCharsets
источник