Где получить строковый литерал в формате "UTF-8" в Java?
Я пытаюсь использовать константу вместо строкового литерала в следующем фрагменте кода:
new InputStreamReader(new FileInputStream(file), "UTF-8")
Строка "UTF-8"
появляется в коде довольно часто, и было бы намного лучше ссылаться на какую-то переменную типа static final
. Знаете ли вы, где можно найти такую переменную в JDK?
5 ответ(ов)
Эта константа доступна (в числе прочих, таких как UTF-16
, US-ASCII
и т.д.) также в классе org.apache.commons.codec.CharEncoding
.
В стандартной библиотеке Java нет таких констант (по крайней мере, в стандартной версии). Наборы символов могут отличаться в зависимости от платформы, поэтому в Java нет единого стандартизированного списка.
Тем не менее, существуют сторонние библиотеки, которые содержат эти константы. Одна из них — Guava (основные библиотеки Google): Guava Charsets.
В версиях Java 1.7 и выше рекомендуется не использовать строку "UTF-8", а вместо этого применять параметр типа Charset
. Это сделает ваш код более безопасным и понятным. Вот пример кода:
import java.nio.charset.StandardCharsets;
...
new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8);
Используя StandardCharsets.UTF_8
, вы избегаете возможных ошибок, связанных с опечатками в названиях кодировок, и делаете код более читаемым.
Вы можете использовать API Charset.defaultCharset()
или свойство file.encoding
.
Однако если вам нужна собственная константа, вам придется определить её самостоятельно.
В стандартной библиотеке Java начиная с версии 1.7 определены константы для стандартных кодировок, которые гарантированно доступны во всех реализациях платформы Java. Например, для кодировки UTF-8 можно использовать следующий код:
package java.nio.charset;
Charset utf8 = StandardCharsets.UTF_8;
Это позволяет избежать ошибок при ручном вводе строк кодировок и делает ваш код более читабельным и надежным. Используйте StandardCharsets
для доступа ко всем стандартным кодировкам, чтобы быть уверенным, что они представлены в вашей среде выполнения.
Инициализация ArrayList в одну строчку
Почему нет ConcurrentHashSet, если есть ConcurrentHashMap?
Как объявить массив в одну строку?
Загрузка JDK Java на Linux через wget приводит к отображению страницы лицензии вместо установки
Создание репозитория Spring без сущности