Где получить строковый литерал "UTF-8" в Java?

Я пытаюсь использовать константу вместо строкового литерала в этом фрагменте кода:

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

"UTF-8" появляется в коде довольно часто, и было бы гораздо лучше ссылаться на некоторую переменную static final. Вы знаете, где я могу найти такую ​​переменную в JDK?

BTW, на второй взгляд, такие константы - плохой дизайн: Публичные статические литералы... не являются решением для дублирования данных

Ответ 1

В Java 1.7+ java.nio.charset.StandardCharsets определяет константы для Charset включая UTF_8.

import java.nio.charset.StandardCharsets

...

StandardCharsets.UTF_8.name();

Для Android: minSdk 19

Ответ 2

Теперь я использую константу org.apache.commons.lang3.CharEncoding.UTF_8 из commons-lang.

Ответ 3

библиотека Google Guava (которую я очень рекомендую в любом случае, если вы работаете на Java) имеет Charsets класс со статическими полями, такими как Charsets.UTF_8, Charsets.UTF_16 и т.д.

Начиная с Java 7, вы должны просто использовать java.nio.charset.StandardCharsets вместо сопоставимых констант.

Обратите внимание, что эти константы не являются строками, они являются фактическими экземплярами Charset. Все стандартные API-интерфейсы, которые принимают имя кодировки, также имеют перегрузку, которая принимает объект Charset, который вы должны использовать вместо этого.

Ответ 4

В случае появления этой страницы в каком-либо веб-поиске, начиная с Java 1.7, теперь вы можете использовать java.nio.charset.StandardCharsets, чтобы получить доступ к постоянным определениям стандартные кодировки.

Ответ 5

Нет (по крайней мере, в стандартной библиотеке Java). Наборы символов варьируются от платформы к платформе, поэтому в Java нет стандартного списка.

Есть некоторые сторонние библиотеки, которые содержат эти константы. Одним из них является Guava (основные библиотеки Google): http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Charsets.html

Ответ 6

Вы можете использовать свойство Charset.defaultCharset() API или file.encoding.

Но если вам нужна ваша собственная константа, вам нужно определить ее самостоятельно.

Ответ 7

Эта константа доступна (среди прочих как: UTF-16, US-ASCII и т.д.) в классе org.apache.commons.codec.CharEncoding.

Ответ 8

Если вы используете OkHttp для Java/Android, вы можете использовать следующую константу:

import com.squareup.okhttp.internal.Util;

Util.UTF_8; // Charset
Util.UTF_8.name(); // String