5

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

13

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

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

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

5 ответ(ов)

0

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

0

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

Тем не менее, существуют сторонние библиотеки, которые содержат эти константы. Одна из них — Guava (основные библиотеки Google): Guava Charsets.

0

В версиях Java 1.7 и выше рекомендуется не использовать строку "UTF-8", а вместо этого применять параметр типа Charset. Это сделает ваш код более безопасным и понятным. Вот пример кода:

import java.nio.charset.StandardCharsets;

...

new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8);

Используя StandardCharsets.UTF_8, вы избегаете возможных ошибок, связанных с опечатками в названиях кодировок, и делаете код более читаемым.

0

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

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

0

В стандартной библиотеке Java начиная с версии 1.7 определены константы для стандартных кодировок, которые гарантированно доступны во всех реализациях платформы Java. Например, для кодировки UTF-8 можно использовать следующий код:

package java.nio.charset;

Charset utf8 = StandardCharsets.UTF_8;

Это позволяет избежать ошибок при ручном вводе строк кодировок и делает ваш код более читабельным и надежным. Используйте StandardCharsets для доступа ко всем стандартным кодировкам, чтобы быть уверенным, что они представлены в вашей среде выполнения.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь