Где получить строковый литерал в формате "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 в одну строчку
Что значит 'synchronized'?
Почему нет ConcurrentHashSet, если есть ConcurrentHashMap?
Как объявить массив в одну строку?
Какие проблемы следует учитывать при переопределении equals и hashCode в Java?