Ответ 1
В Java 1.7+ java.nio.charset.StandardCharsets определяет константы для Charset
включая UTF_8
.
import java.nio.charset.StandardCharsets
...
StandardCharsets.UTF_8.name();
Для Android: minSdk 19
Я пытаюсь использовать константу вместо строкового литерала в этом фрагменте кода:
new InputStreamReader(new FileInputStream(file), "UTF-8")
"UTF-8"
появляется в коде довольно часто, и было бы гораздо лучше ссылаться на некоторую переменную static final
. Вы знаете, где я могу найти такую переменную в JDK?
BTW, на второй взгляд, такие константы - плохой дизайн: Публичные статические литералы... не являются решением для дублирования данных
В Java 1.7+ java.nio.charset.StandardCharsets определяет константы для Charset
включая UTF_8
.
import java.nio.charset.StandardCharsets
...
StandardCharsets.UTF_8.name();
Для Android: minSdk 19
Теперь я использую константу org.apache.commons.lang3.CharEncoding.UTF_8
из commons-lang.
библиотека Google Guava (которую я очень рекомендую в любом случае, если вы работаете на Java) имеет Charsets
класс со статическими полями, такими как Charsets.UTF_8
, Charsets.UTF_16
и т.д.
Начиная с Java 7, вы должны просто использовать java.nio.charset.StandardCharsets
вместо сопоставимых констант.
Обратите внимание, что эти константы не являются строками, они являются фактическими экземплярами Charset
. Все стандартные API-интерфейсы, которые принимают имя кодировки, также имеют перегрузку, которая принимает объект Charset
, который вы должны использовать вместо этого.
В случае появления этой страницы в каком-либо веб-поиске, начиная с Java 1.7, теперь вы можете использовать java.nio.charset.StandardCharsets, чтобы получить доступ к постоянным определениям стандартные кодировки.
Нет (по крайней мере, в стандартной библиотеке Java). Наборы символов варьируются от платформы к платформе, поэтому в Java нет стандартного списка.
Есть некоторые сторонние библиотеки, которые содержат эти константы. Одним из них является Guava (основные библиотеки Google): http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Charsets.html
Вы можете использовать свойство Charset.defaultCharset()
API или file.encoding
.
Но если вам нужна ваша собственная константа, вам нужно определить ее самостоятельно.
Эта константа доступна (среди прочих как: UTF-16
, US-ASCII
и т.д.) в классе org.apache.commons.codec.CharEncoding
.
Если вы используете OkHttp для Java/Android, вы можете использовать следующую константу:
import com.squareup.okhttp.internal.Util;
Util.UTF_8; // Charset
Util.UTF_8.name(); // String